Modified: subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/entries-compat.c URL: http://svn.apache.org/viewvc/subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/entries-compat.c?rev=1661899&r1=1661884&r2=1661899&view=diff ============================================================================== --- subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/entries-compat.c (original) +++ subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/entries-compat.c Tue Feb 24 11:56:52 2015 @@ -87,199 +87,186 @@ static const char * const TESTING_DATA = "insert into wcroot values (1, null); " "insert into pristine values ('$sha1$" SHA1_1 "', NULL, 15, 1, '$md5 $" MD5_1 "'); " + ); - /* ### The file_externals column in NODES is temporary, and will be - ### removed. However, to keep the tests passing, we need to add it - ### to the following insert statements. *Be sure to remove it*. */ +#define NOT_MOVED FALSE, NULL +#define NO_COPY_FROM 0, NULL, SVN_INVALID_REVNUM +static const svn_test__nodes_data_t nodes[] = +{ /* load the base nodes into the nodes table */ - "insert into nodes values (" - " 1, '', 0, null, 1, '', 1, 'normal'," - " null, null, 'dir', '()', 'infinity', null, null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'A', 0, '', 1, 'A', 1, 'normal'," - " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " 10, null, null, null, null);" - "insert into nodes values (" - " 1, 'B', 0, '', 1, 'B', null, 'excluded'," - " null, null, 'symlink', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'C', 0, '', 1, 'C', null, 'server-excluded'," - " null, null, 'unknown', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'D', 0, '', 1, 'D', null, 'not-present'," - " null, null, 'unknown', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'E', 0, '', 1, 'E', null, 'incomplete'," - " null, null, 'unknown', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'F', 0, '', 1, 'F', 1, 'normal'," - " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " 15, null, null, null, null);" - "insert into nodes values (" - " 1, 'G', 0, '', 2, 'G-alt', 1, 'normal'," - " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 2, " TIME_2s ", '" AUTHOR_2 "'," - " 15, null, null, null, null);" - "insert into nodes values (" - " 1, 'H', 0, '', 1, 'H', 1, 'normal'," - " null, null, 'symlink', '()', null, null, 'H-target', 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'I', 0, '', 1, 'I', 1, 'normal'," - " null, null, 'file', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J', 0, '', 1, 'J', 1, 'normal'," - " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-e', 0, 'J', 1, 'J/J-e', 1, 'normal'," - " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-e/J-e-a', 0, 'J/J-e', 1, 'J/J-e/J-e-a', 1, 'normal'," - " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " 15, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-e/J-e-b', 0, 'J/J-e', 1, 'J/J-e/J-e-b', 1, 'normal'," - " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-e/J-e-b/Jeba', 0, 'J/J-e/J-e-b', 1, 'J/J-e/J-e-b/Jeba', 1, 'normal'," - " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " 15, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-f', 0, 'J', 1, 'J/J-f', 1, 'normal'," - " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-f/J-f-a', 0, 'J/J-f', 1, 'J/J-f/J-f-a', 1, 'normal'," - " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'K', 0, '', 1, 'K', 1, 'normal'," - " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'K/K-a', 0, 'K', 1, 'K/K-a', 1, 'normal'," - " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " 15, null, null, null, null);" - "insert into nodes values (" - " 1, 'K/K-b', 0, 'K', 1, 'K/K-b', 1, 'normal'," - " null, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 1, " TIME_1s ", '" AUTHOR_1 "'," - " 15, null, null, null, null);" - "" + { 0, "", "normal", 1, "", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "A", "normal", 1, "A", 1, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "B", "excluded", 1, "B", 1, NOT_MOVED, + svn_node_symlink}, + + { 0, "C", "server-excluded",1, "C", 0, NOT_MOVED, + svn_node_unknown}, + + { 0, "D", "not-present", 1, "D", 0, NOT_MOVED, + svn_node_unknown}, + + { 0, "E", "incomplete", 1, "E", SVN_INVALID_REVNUM, NOT_MOVED, + svn_node_unknown}, + + { 0, "F", "normal", 1, "G-alt", 1, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "G", "normal", 1, "G-alt", 1, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "H", "normal", 1, "I", 1, NOT_MOVED, + svn_node_symlink, NULL, NULL, NULL, "H-target", 1, TIME_1a, AUTHOR_1}, + + { 0, "I", "normal", 1, "I", 1, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "J", "normal", 1, "J", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "J/J-c", "normal", 1, "J/J-c", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "J/J-c/J-c-a", "not-present", 1, "J/J-c/J-c-a", 1, NOT_MOVED, + svn_node_dir}, + + { 0, "J/J-e", "normal", 1, "J/J-e", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "J/J-e/J-e-a", "normal", 1, "J/J-e/J-e-a", 1, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "J/J-e/J-e-b", "normal", 1, "J/J-e/J-e-b", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "J/J-e/J-e-b/Jeba", "normal", 1, "J/J-e/J-e-b/Jeba", 1, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "J/J-f", "normal", 1, "J/J-f", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "J/J-f/J-f-a", "normal", 1, "J/J-f/J-f-a", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "K", "normal", 1, "K", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "K/K-a", "normal", 1, "K/K-a", 1, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "K/K-b", "normal", 1, "K/K-b", 1, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "L", "normal", 1, "switched", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "L/L-a", "normal", 1, "switched/L-a", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 0, "L/L-a/L-a-a", "normal", 1, "switched/L-a/L-a-a", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + /* Load data into NODES table; ### op_depths have not been calculated by me yet; the value 1 is just 'good enough' to make the nodes WORKING nodes. */ - "insert into nodes values (" - " 1, 'I', 1, '', 2, 'some/dir', 2, 'normal'," - " null, null, 'file', '()', 'immediates', null, null, 2, " TIME_2s ", '" AUTHOR_2 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J', 1, '', null, null, null, 'normal'," - " null, null, 'dir', '()', 'immediates', null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-a', 1, 'J', null, null, null, 'normal'," - " null, null, 'file', '()', null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-b', 1, 'J', 2, 'some/dir', 2, 'normal'," - " null, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-b/J-b-a', 1, 'J/J-b', 2, 'another/dir', 2, 'normal'," - " null, null, 'dir', '()', 'infinity', null, null, 2, " TIME_2s ", '" AUTHOR_2 "'," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-b/J-b-b', 1, 'J/J-b', null, null, null, 'normal'," - " null, null, 'file', '()', null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-c', 1, 'J', null, null, null, 'not-present'," - " null, null, 'dir', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-c/J-c-a', 1, 'J/J-c', null, null, null, 'not-present'," - " null, null, 'dir', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-d', 1, 'J', 2, 'moved/file', 2, 'normal'," - " 1, null, 'file', '()', null, '$sha1$" SHA1_1 "', null, 2, " TIME_2s ", '" AUTHOR_2 "'," - " 10, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-e', 1, 'J', null, null, null, 'not-present'," - " null, 'other/place', 'dir', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-e/J-e-a', 1, 'J/J-e', null, null, null, 'not-present'," - " null, null, 'file', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-e/J-e-b', 1, 'J/J-e', null, null, null, 'not-present'," - " null, null, 'dir', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-e/J-e-b/Jeba', 1, 'J/J-e/J-e-b', null, null, null, 'base-deleted'," - " null, null, 'file', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-f', 1, 'J', null, null, null, 'normal'," - " null, null, 'dir', '()', 'immediates', null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'J/J-f/J-f-a', 1, 'J/J-f', null, null, null, 'base-deleted'," - " null, null, 'dir', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'K', 1, '', null, null, null, 'base-deleted'," - " null, null, 'dir', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'K/K-a', 1, 'K', null, null, null, 'base-deleted'," - " null, null, 'file', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'K/K-b', 1, 'K', null, null, null, 'base-deleted'," - " null, 'moved/away', 'file', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'L', 1, '', null, null, null, 'normal'," - " null, null, 'dir', '()', 'immediates', null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'L/L-a', 1, 'L', null, null, null, 'not-present'," - " null, null, 'dir', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'L/L-a/L-a-a', 1, 'L/L-a', null, null, null, 'not-present'," - " null, null, 'dir', null, null, null, null, null, null, null," - " null, null, null, null, null);" - "insert into actual_node values (" - " 1, 'I', '', null, null, null, null, null, 'changelist', null, " - " null, null, null, null, null);" - "insert into actual_node values (" - " 1, 'F', '', null, null, null, null, null, null, null, " - " '" F_TC_DATA "', null, null, null, null);" - "insert into actual_node values (" - " 1, 'G', '', null, null, null, null, null, null, null, " - " '" G_TC_DATA "', null, null, null, null);" - " " - "insert into nodes values (" - " 1, 'M', 0, '', 1, 'M', 1, 'normal', " - " null, null, 'dir', '()', null, null, null, 1, " TIME_1s ", '" AUTHOR_1 "', " - " null, null, null, null, null);" - "insert into nodes values (" - " 1, 'M/M-a', 0, 'M', 1, 'M/M-a', 1, 'not-present', " - " null, null, 'file', null, null, null, null, null, null, null, " - " null, null, null, null, null);" - ); + + { 1, "I", "normal", 2, "some/file", 2, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 2, TIME_2a, AUTHOR_2}, + + { 1, "J", "normal", NO_COPY_FROM, NOT_MOVED, + svn_node_dir, NULL, "immediates"}, + + { 2, "J/J-a", "normal", NO_COPY_FROM, NOT_MOVED, + svn_node_file}, + + { 2, "J/J-b", "normal", 2, "some/dir", 2, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 2, TIME_2a, AUTHOR_2}, + + { 3, "J/J-b/J-b-a", "normal", 2, "another/dir", 2, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 2, TIME_2a, AUTHOR_2}, + + { 3, "J/J-b/J-b-b", "normal", NO_COPY_FROM, NOT_MOVED, + svn_node_file}, + + /* This triggers a validation warning: bad delete */ + { 1, "J/J-c", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_dir}, + + { 1, "J/J-d", "normal", 2, "moved/file", 2, NOT_MOVED, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 2, TIME_2a, AUTHOR_2}, + + { 1, "J/J-e", "base-deleted", NO_COPY_FROM, FALSE, "other/place", + svn_node_dir}, + + { 1, "J/J-e/J-e-a", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_file}, + + { 1, "J/J-e/J-e-b", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_dir}, + + { 1, "J/J-e/J-e-b/Jeba", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_file}, + + { 1, "J/J-f", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_dir}, + + { 2, "J/J-f", "normal", NO_COPY_FROM, NOT_MOVED, + svn_node_dir, NULL, "immediates"}, + + { 1, "J/J-f/J-f-a", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_dir}, + + { 1, "K", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_dir}, + + { 1, "K/K-a", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_file}, + + { 1, "K/K-b", "base-deleted", NO_COPY_FROM, FALSE, "moved/away", + svn_node_file}, + + { 1, "L", "normal", NO_COPY_FROM, NOT_MOVED, + svn_node_dir, NULL, "immediates"}, + + { 1, "L/L-a", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_dir}, + + { 1, "L/L-a/L-a-a", "base-deleted", NO_COPY_FROM, NOT_MOVED, + svn_node_dir}, + + { 1, "M", "normal", 1, "M", 1, NOT_MOVED, + svn_node_dir, "()", "infinity", NULL, NULL, 1, TIME_1a, AUTHOR_1}, + + { 1, "M/M-a", "not-present", 1, "M/M-a", 1, NOT_MOVED, + svn_node_file}, + + /**** Move target of K/K-b ****/ + { 1, "moved", "normal", NO_COPY_FROM, NOT_MOVED, + svn_node_dir, NULL, "infinity" }, + { 2, "moved/away", "normal", 1, "??", 1, TRUE, NULL, + svn_node_file, "()", NULL, "$sha1$" SHA1_1, NULL, 1, TIME_1a, AUTHOR_1}, + + /**** Move target of J/J-e ****/ + { 1, "other", "normal", NO_COPY_FROM, NOT_MOVED, + svn_node_dir, NULL, "empty"}, + + { 2, "other/place", "normal", 1, "??", 1, TRUE, NULL, + svn_node_dir, "()", "infinity"}, + + { 0 }, +}; + +static const svn_test__actual_data_t actuals[] = +{ + { "I", NULL, "changelist", NULL }, + { "F", NULL, NULL, NULL /* TC-DATA */ }, + { "G", NULL, NULL, NULL /* TC-DATA */ }, + { 0 }, +}; static const char * const M_TESTING_DATA = ( @@ -310,7 +297,8 @@ create_fake_wc(const char *subdir, apr_p SVN_ERR(svn_io_remove_dir2(root, TRUE, NULL, NULL, pool)); SVN_ERR(svn_dirent_get_absolute(&wc_abspath, root, pool)); - SVN_ERR(svn_test__create_fake_wc(wc_abspath, TESTING_DATA, pool)); + SVN_ERR(svn_test__create_fake_wc(wc_abspath, TESTING_DATA, nodes, actuals, + pool)); return SVN_NO_ERROR; } @@ -365,8 +353,8 @@ test_entries_alloc(apr_pool_t *pool) SVN_ERR(svn_wc_entries_read(&entries, adm_access, TRUE /* show_hidden */, pool)); - /* The wcroot has 12 BASE children + 1 WORKING child + "this dir". */ - SVN_TEST_ASSERT(apr_hash_count(entries) == 14); + /* The wcroot has 12 BASE children + 3 WORKING child + "this dir". */ + SVN_TEST_ASSERT(apr_hash_count(entries) == 16); /* The "D" entry in the entries hash should be what we get from the svn_wc_entry() entrypoint. */ @@ -406,7 +394,7 @@ test_stubs(apr_pool_t *pool) SVN_ERR(create_open(&db, &local_abspath, WC_NAME, pool)); M_dir = svn_dirent_join(local_abspath, "M", pool); - SVN_ERR(svn_test__create_fake_wc(M_dir, M_TESTING_DATA, pool)); + SVN_ERR(svn_test__create_fake_wc(M_dir, M_TESTING_DATA, NULL, NULL, pool)); /* The "M" entry is a subdir. Let's ensure we can reach its stub, and the actual contents. */
Modified: subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/op-depth-test.c URL: http://svn.apache.org/viewvc/subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/op-depth-test.c?rev=1661899&r1=1661884&r2=1661899&view=diff ============================================================================== --- subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/op-depth-test.c (original) +++ subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/op-depth-test.c Tue Feb 24 11:56:52 2015 @@ -2031,6 +2031,9 @@ insert_actual(svn_test__sandbox_t *b, SVN_ERR(svn_sqlite__step_done(stmt)); if (actual->changelist) { + SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, + STMT_ENSURE_EMPTY_PRISTINE)); + SVN_ERR(svn_sqlite__step_done(stmt)); SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, STMT_NODES_SET_FILE)); SVN_ERR(svn_sqlite__bindf(stmt, "s", actual->local_relpath)); SVN_ERR(svn_sqlite__step_done(stmt)); Modified: subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/utils.c URL: http://svn.apache.org/viewvc/subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/utils.c?rev=1661899&r1=1661884&r2=1661899&view=diff ============================================================================== --- subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/utils.c (original) +++ subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/utils.c Tue Feb 24 11:56:52 2015 @@ -33,7 +33,7 @@ #include "../../libsvn_wc/wc-queries.h" #define SVN_WC__I_AM_WC_DB #include "../../libsvn_wc/wc_db_private.h" - +#include "../../libsvn_wc/token-map.h" svn_error_t * svn_test__create_client_ctx(svn_client_ctx_t **ctx, svn_test__sandbox_t *sbox, @@ -122,6 +122,9 @@ WC_QUERIES_SQL_DECLARE_STATEMENTS(statem svn_error_t * svn_test__create_fake_wc(const char *wc_abspath, const char *extra_statements, + const svn_test__nodes_data_t nodes[], + const svn_test__actual_data_t actuals[], + apr_pool_t *scratch_pool) { const char *dotsvn_abspath = svn_dirent_join(wc_abspath, ".svn", @@ -129,6 +132,8 @@ svn_test__create_fake_wc(const char *wc_ svn_sqlite__db_t *sdb; const char **my_statements; int i; + svn_sqlite__stmt_t *stmt; + const apr_int64_t wc_id = 1; /* Allocate MY_STATEMENTS in RESULT_POOL because the SDB will continue to * refer to it over its lifetime. */ @@ -153,6 +158,110 @@ svn_test__create_fake_wc(const char *wc_ SVN_ERR(svn_sqlite__close(sdb)); + if (!nodes && !actuals) + return SVN_NO_ERROR; + + /* Re-open with normal set of statements */ + SVN_ERR(svn_wc__db_util_open_db(&sdb, wc_abspath, "wc.db", + svn_sqlite__mode_readwrite, + FALSE /* exclusive */, 0 /* timeout */, + statements, + scratch_pool, scratch_pool)); + + if (nodes) + { + SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, + STMT_INSERT_NODE)); + + for (i = 0; nodes[i].local_relpath; i++) + { + SVN_ERR(svn_sqlite__bindf(stmt, "isdsnnns", + wc_id, + nodes[i].local_relpath, + nodes[i].op_depth, + nodes[i].local_relpath[0] + ? svn_relpath_dirname(nodes[i].local_relpath, + scratch_pool) + : NULL, + nodes[i].presence)); + + if (nodes[i].repos_relpath) + { + SVN_ERR(svn_sqlite__bind_int64(stmt, 5, nodes[i].repos_id)); + SVN_ERR(svn_sqlite__bind_text(stmt, 6, nodes[i].repos_relpath)); + SVN_ERR(svn_sqlite__bind_revnum(stmt, 7, nodes[i].revision)); + } + + if (nodes[i].depth) + SVN_ERR(svn_sqlite__bind_text(stmt, 9, nodes[i].depth)); + + if (nodes[i].kind != 0) + SVN_ERR(svn_sqlite__bind_token(stmt, 10, kind_map, nodes[i].kind)); + + if (nodes[i].last_author || nodes[i].last_date) + { + SVN_ERR(svn_sqlite__bind_revnum(stmt, 11, nodes[i].last_revision)); + SVN_ERR(svn_sqlite__bind_int64(stmt, 12, nodes[i].last_date)); + SVN_ERR(svn_sqlite__bind_text(stmt, 13, nodes[i].last_author)); + } + + if (nodes[i].checksum) + SVN_ERR(svn_sqlite__bind_text(stmt, 14, nodes[i].checksum)); + + if (nodes[i].properties) + SVN_ERR(svn_sqlite__bind_text(stmt, 15, nodes[i].properties)); + + if (nodes[i].recorded_size || nodes[i].recorded_time) + { + SVN_ERR(svn_sqlite__bind_int64(stmt, 16, nodes[i].recorded_size)); + SVN_ERR(svn_sqlite__bind_int64(stmt, 17, nodes[i].recorded_time)); + } + + /* 18 is DAV cache */ + + if (nodes[i].symlink_target) + SVN_ERR(svn_sqlite__bind_text(stmt, 19, nodes[i].symlink_target)); + + if (nodes[i].file_external) + SVN_ERR(svn_sqlite__bind_int(stmt, 20, 1)); + + if (nodes[i].moved_to) + SVN_ERR(svn_sqlite__bind_text(stmt, 21, nodes[i].moved_to)); + + if (nodes[i].moved_here) + SVN_ERR(svn_sqlite__bind_int(stmt, 22, 1)); + + if (nodes[i].inherited_props) + SVN_ERR(svn_sqlite__bind_text(stmt, 23, nodes[i].inherited_props)); + + SVN_ERR(svn_sqlite__step_done(stmt)); + } + } + + if (actuals) + { + SVN_ERR(svn_sqlite__get_statement(&stmt, sdb, + STMT_INSERT_ACTUAL_NODE)); + + for (i = 0; actuals[i].local_relpath; i++) + { + SVN_ERR(svn_sqlite__bindf(stmt, "isssss", + wc_id, + actuals[i].local_relpath, + actuals[i].local_relpath[0] + ? svn_relpath_dirname(actuals[i].local_relpath, + scratch_pool) + : NULL, + actuals[i].properties, + actuals[i].changelist, + actuals[i].conflict_data)); + + SVN_ERR(svn_sqlite__step_done(stmt)); + } + } + + SVN_ERR(svn_sqlite__close(sdb)); + return SVN_NO_ERROR; } Modified: subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/utils.h URL: http://svn.apache.org/viewvc/subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/utils.h?rev=1661899&r1=1661884&r2=1661899&view=diff ============================================================================== --- subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/utils.h (original) +++ subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/utils.h Tue Feb 24 11:56:52 2015 @@ -179,6 +179,39 @@ sbox_wc_propset(svn_test__sandbox_t *b, svn_error_t * sbox_add_and_commit_greek_tree(svn_test__sandbox_t *b); +/* Initial data to store in NODES */ +typedef struct svn_test__nodes_data_t +{ + int op_depth; + const char *local_relpath; + const char *presence; + int repos_id; + const char *repos_relpath; + svn_revnum_t revision; + svn_boolean_t moved_here; + const char *moved_to; + svn_node_kind_t kind; + const char *properties; + const char *depth; + const char *checksum; + const char *symlink_target; + svn_revnum_t last_revision; + apr_time_t last_date; + const char *last_author; + svn_boolean_t file_external; + const char *inherited_props; + svn_filesize_t recorded_size; + apr_time_t recorded_time; +} svn_test__nodes_data_t; + +/* Initial data to store in ACTUAL */ +typedef struct svn_test__actual_data_t +{ + const char *local_relpath; + const char *properties; + const char *changelist; + const char *conflict_data; +} svn_test__actual_data_t; /* Create a WC directory at WC_ABSPATH containing a fake WC DB, generated by * executing the SQL statements EXTRA_STATEMENTS in addition to the standard @@ -186,6 +219,8 @@ sbox_add_and_commit_greek_tree(svn_test_ svn_error_t * svn_test__create_fake_wc(const char *wc_abspath, const char *extra_statements, + const svn_test__nodes_data_t nodes[], + const svn_test__actual_data_t actuals[], apr_pool_t *scratch_pool); Modified: subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/wc-queries-test.c URL: http://svn.apache.org/viewvc/subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1661899&r1=1661884&r2=1661899&view=diff ============================================================================== --- subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/wc-queries-test.c (original) +++ subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/wc-queries-test.c Tue Feb 24 11:56:52 2015 @@ -984,6 +984,59 @@ test_schema_statistics(apr_pool_t *scrat return SVN_NO_ERROR; } +/* An SQLite application defined function that allows SQL queries to + use "relpath_depth(local_relpath)". */ +static void relpath_depth_sqlite(sqlite3_context* context, + int argc, + sqlite3_value* values[]) +{ + SVN_ERR_MALFUNCTION_NO_RETURN(); /* STUB! */ +} + +/* Parse all verify/check queries */ +static svn_error_t * +test_verify_parsable(apr_pool_t *scratch_pool) +{ + sqlite3 *sdb; + int i; + + SVN_ERR(create_memory_db(&sdb, scratch_pool)); + + SQLITE_ERR(sqlite3_create_function(sdb, "relpath_depth", 1, SQLITE_ANY, NULL, + relpath_depth_sqlite, NULL, NULL)); + + for (i=STMT_VERIFICATION_TRIGGERS; wc_queries[i]; i++) + { + sqlite3_stmt *stmt; + const char *text = wc_queries[i]; + + /* Some of our statement texts contain multiple queries. We prepare + them all. */ + while (*text != '\0') + { + const char *tail; + int r = sqlite3_prepare_v2(sdb, text, -1, &stmt, &tail); + + if (r != SQLITE_OK) + return svn_error_createf(SVN_ERR_SQLITE_ERROR, NULL, + "Preparing %s failed: %s\n%s", + wc_query_info[i][0], + sqlite3_errmsg(sdb), + text); + + SQLITE_ERR(sqlite3_finalize(stmt)); + + /* Continue after the current statement */ + text = tail; + } + } + + SQLITE_ERR(sqlite3_close(sdb)); /* Close the DB if ok; otherwise leaked */ + + return SVN_NO_ERROR; +} + + static int max_threads = 1; static struct svn_test_descriptor_t test_funcs[] = @@ -999,6 +1052,8 @@ static struct svn_test_descriptor_t test "test query duplicates"), SVN_TEST_PASS2(test_schema_statistics, "test schema statistics"), + SVN_TEST_PASS2(test_verify_parsable, + "verify queries are parsable"), SVN_TEST_NULL }; Modified: subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/wc-test-queries.sql URL: http://svn.apache.org/viewvc/subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/wc-test-queries.sql?rev=1661899&r1=1661884&r2=1661899&view=diff ============================================================================== --- subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/wc-test-queries.sql (original) +++ subversion/branches/1.9.x-db-verify/subversion/tests/libsvn_wc/wc-test-queries.sql Tue Feb 24 11:56:52 2015 @@ -58,8 +58,18 @@ DELETE FROM actual_node; INSERT INTO actual_node (local_relpath, parent_relpath, changelist, wc_id) VALUES (?1, ?2, ?3, 1) +-- STMT_ENSURE_EMPTY_PRISTINE +INSERT OR IGNORE INTO pristine (checksum, md5_checksum, size, refcount) + VALUES ('$sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709', + '$md5 $d41d8cd98f00b204e9800998ecf8427e', + 0, 0) + -- STMT_NODES_SET_FILE -UPDATE nodes SET kind = 'file' WHERE wc_id = 1 and local_relpath = ?1 +UPDATE nodes + SET kind = 'file', + checksum = '$sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709', + depth = NULL +WHERE wc_id = 1 and local_relpath = ?1 -- STMT_SELECT_ALL_ACTUAL SELECT local_relpath FROM actual_node WHERE wc_id = 1
