You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2012/05/21 19:58:24 UTC

svn commit: r1341130 - /subversion/trunk/subversion/tests/libsvn_wc/wc-queries-test.c

Author: rhuijben
Date: Mon May 21 17:58:24 2012
New Revision: 1341130

URL: http://svn.apache.org/viewvc?rev=1341130&view=rev
Log:
* subversion/tests/libsvn_wc/wc-queries-test.c
  (test_query_expectations): Use a different method to detect
    SQLITE_OMIT_EXPLAIN compilation option of Sqlite.

Modified:
    subversion/trunk/subversion/tests/libsvn_wc/wc-queries-test.c

Modified: subversion/trunk/subversion/tests/libsvn_wc/wc-queries-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1341130&r1=1341129&r2=1341130&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/wc-queries-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/wc-queries-test.c Mon May 21 17:58:24 2012
@@ -381,11 +381,44 @@ test_query_expectations(apr_pool_t *scra
   sqlite3 *sdb;
   int i;
   apr_pool_t *iterpool = svn_pool_create(scratch_pool);
-  svn_boolean_t skipped_all = TRUE;
   svn_error_t *warnings = NULL;
 
   SVN_ERR(create_memory_db(&sdb, scratch_pool));
 
+  /* Sqlite has an SQLITE_OMIT_EXPLAIN compilation flag. In this case the
+     'EXPLAIN QUERY PLAN' option is currently just ignored and the query
+     evaluated (status at Sqlite 3.7.12).
+     
+     Detect this case, and skip this test */
+  {
+    sqlite3_stmt *stmt;
+    int r;
+    r = sqlite3_prepare(sdb, "EXPLAIN QUERY PLAN SELECT 101010101",
+                        -1, &stmt, NULL);
+
+    if (r != SQLITE_OK)
+      {
+        SQLITE_ERR(sqlite3_close(sdb));
+        return svn_error_create(SVN_ERR_TEST_SKIPPED, warnings,
+                                "Sqlite doesn't support EXPLAIN QUERY PLAN");
+      }
+
+    if (sqlite3_step(stmt) == SQLITE_ROW)
+      {
+        if (sqlite3_column_count(stmt) == 1
+            && sqlite3_column_int(stmt, 0) == 101010101)
+          {
+            SQLITE_ERR(sqlite3_reset(stmt));
+            SQLITE_ERR(sqlite3_finalize(stmt));
+            SQLITE_ERR(sqlite3_close(sdb));
+            return svn_error_create(SVN_ERR_TEST_SKIPPED, warnings,
+                                "Sqlite doesn't support EXPLAIN QUERY PLAN");
+          }
+      }
+    SQLITE_ERR(sqlite3_reset(stmt));
+    SQLITE_ERR(sqlite3_finalize(stmt));
+  }
+
   for (i=0; i < STMT_SCHEMA_FIRST; i++)
     {
       sqlite3_stmt *stmt;
@@ -417,8 +450,6 @@ test_query_expectations(apr_pool_t *scra
       if (r != SQLITE_OK)
         continue; /* EXPLAIN not enabled or doesn't support this query */
 
-      skipped_all = FALSE;
-
       while (SQLITE_ROW == (r = sqlite3_step(stmt)))
         {
           /*int iSelectid;
@@ -492,9 +523,6 @@ test_query_expectations(apr_pool_t *scra
     }
   SQLITE_ERR(sqlite3_close(sdb)); /* Close the DB if ok; otherwise leaked */
 
-  if (skipped_all)
-    return svn_error_create(SVN_ERR_TEST_SKIPPED, warnings, "Sqlite doesn't support EXPLAIN QUERY PLAN");
-
   return warnings;
 }