http://svn.apache.org/viewvc?view=revision&revision=1542774 (H/T Andreas Stieger) --- subversion-1.8.5/subversion/tests/libsvn_wc/wc-queries-test.c.r1542774 +++ subversion-1.8.5/subversion/tests/libsvn_wc/wc-queries-test.c @@ -95,8 +95,8 @@ static const int slow_statements[] = /* Operate on the entire WC */ STMT_SELECT_ALL_NODES, /* schema validation code */ - /* Is there a record? ### Can we somehow check for LIMIT 1? */ - STMT_LOOK_FOR_WORK, + /* Updates all records for a repository (designed slow) */ + STMT_UPDATE_LOCK_REPOS_ID, /* Full temporary table read */ STMT_INSERT_ACTUAL_EMPTIES, @@ -114,6 +114,19 @@ static const int slow_statements[] = -1 /* final marker */ }; +/* Statements that just read the first record from a table, + using the primary key. Specialized as different sqlite + versions produce different results */ +static const int primary_key_statements[] = +{ + /* Is there a record? ### Can we somehow check for LIMIT 1, + and primary key instead of adding a list? */ + STMT_LOOK_FOR_WORK, + STMT_SELECT_WORK_ITEM, + + -1 /* final marker */ +}; + /* Helper function to determine if a statement is in a list */ static svn_boolean_t in_list(const int list[], int stmt_idx) @@ -529,6 +542,7 @@ is_node_table(const char *table_name) return (apr_strnatcasecmp(table_name, "nodes") == 0 || apr_strnatcasecmp(table_name, "actual_node") == 0 || apr_strnatcasecmp(table_name, "externals") == 0 + || apr_strnatcasecmp(table_name, "lock") == 0 || apr_strnatcasecmp(table_name, "wc_lock") == 0 || FALSE); } @@ -651,14 +665,24 @@ test_query_expectations(apr_pool_t *scra || (item->expression_vars < 1)) && !is_result_table(item->table)) { - warned = TRUE; - if (!is_slow_statement(i)) - warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings, + if (in_list(primary_key_statements, i)) + { + /* Reported as primary key index usage in Sqlite 3.7, + as table scan in 3.8+, while the execution plan is + identical: read first record from table */ + } + else if (!is_slow_statement(i)) + { + warned = TRUE; + warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings, "%s: " "Uses %s with only %d index component: (%s)\n%s", wc_query_info[i][0], item->table, item->expression_vars, item->expressions, wc_queries[i]); + } + else + warned = TRUE; } else if (item->search && !item->index) {