[patches] [PATCH] sql: remove support of partial indexes

Gleb gleb-skiba at mail.ru
Wed Mar 14 21:56:35 MSK 2018


Issue from https://github.com/tarantool/tarantool/issues/2165.
Source from https://github.com/tarantool/tarantool/tree/gh-2165-remove-support-partial-indexes.
Remove support partial indexes, and comment tests on this.
Rewrite commit in template way.

Fixes #2165
---
 src/box/sql/build.c              |  11 +-
 src/box/sql/parse.c              | 205 +++++++++---------
 src/box/sql/parse.y              |   3 +-
 test/sql-tap/analyze9.test.lua   | 144 ++++++-------
 test/sql-tap/autoindex4.test.lua |  34 +--
 test/sql-tap/fkey1.test.lua      |  65 +++---
 test/sql-tap/index6.test.lua     | 437 ++++++++++++++++++++-------------------
 test/sql-tap/index7.test.lua     |  81 ++++----
 8 files changed, 491 insertions(+), 489 deletions(-)

diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index 9ad0c06..e39fa87 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -76,7 +76,7 @@ sqlite3FinishCoding(Parse * pParse)
 		return;
 	}
 
-	/* Begin by generating some termination code at the end of the
+	/* Begin by generating some termination code at the end of the 
 	 * vdbe program
 	 */
 	v = sqlite3GetVdbe(pParse);
@@ -1031,8 +1031,8 @@ sqlite3AddPrimaryKey(Parse * pParse,	/* Parsing context */
 		sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an "
 				"INTEGER PRIMARY KEY or INT PRIMARY KEY");
 	} else {
-		sqlite3CreateIndex(pParse, 0, 0, pList, onError, 0,
-				   0, sortOrder, 0, SQLITE_IDXTYPE_PRIMARYKEY);
+		sqlite3CreateIndex(pParse, 0, 0, pList, onError, 0, 0,
+				   sortOrder, 0, SQLITE_IDXTYPE_PRIMARYKEY);
 		pList = 0;
 	}
 
@@ -2961,12 +2961,10 @@ sqlite3CreateIndex(Parse * pParse,	/* All information about this parse */
 	/* Tarantool have access to each column by any index */
 	pIndex->isCovering = 1;
 	if (pPIWhere) {
-		sqlite3ResolveSelfReference(pParse, pTab, NC_PartIdx, pPIWhere,
-					    0);
+		sqlite3ResolveSelfReference(pParse, pTab, NC_PartIdx, pPIWhere,0);
 		pIndex->pPartIdxWhere = pPIWhere;
 		pPIWhere = 0;
 	}
-
 	/* Analyze the list of expressions that form the terms of the index and
 	 * report any errors.  In the common case where the expression is exactly
 	 * a table column, store that column in aiColumn[].  For general expressions,
@@ -3207,7 +3205,6 @@ sqlite3CreateIndex(Parse * pParse,	/* All information about this parse */
  exit_create_index:
 	if (pIndex)
 		freeIndex(db, pIndex);
-	sqlite3ExprDelete(db, pPIWhere);
 	sqlite3ExprListDelete(db, pList);
 	sqlite3SrcListDelete(db, pTblName);
 	sqlite3DbFree(db, zName);
diff --git a/src/box/sql/parse.c b/src/box/sql/parse.c
index 0019b77..2364feb 100644
--- a/src/box/sql/parse.c
+++ b/src/box/sql/parse.c
@@ -203,7 +203,7 @@ static void disableLookaside(Parse *pParse){
     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0);
     pOut->zEnd = pOperand->zEnd;
   }
-#line 1263 "parse.y"
+#line 1264 "parse.y"
 
   /* Add a single new term to an ExprList that is used to store a
   ** list of identifiers.  Report an error if the ID list contains
@@ -1494,7 +1494,7 @@ sqlite3ExprDelete(pParse->db, (yypminor->yy162).pExpr);
     case 213: /* paren_exprlist */
     case 215: /* case_exprlist */
 {
-#line 1261 "parse.y"
+#line 1262 "parse.y"
 sqlite3ExprListDelete(pParse->db, (yypminor->yy382));
 #line 1500 "parse.c"
 }
@@ -1512,7 +1512,7 @@ sqlite3SrcListDelete(pParse->db, (yypminor->yy387));
     case 184: /* with */
     case 229: /* wqlist */
 {
-#line 1510 "parse.y"
+#line 1511 "parse.y"
 sqlite3WithDelete(pParse->db, (yypminor->yy151));
 #line 1518 "parse.c"
 }
@@ -1541,14 +1541,14 @@ sqlite3IdListDelete(pParse->db, (yypminor->yy40));
     case 221: /* trigger_cmd_list */
     case 226: /* trigger_cmd */
 {
-#line 1384 "parse.y"
+#line 1385 "parse.y"
 sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy427));
 #line 1547 "parse.c"
 }
       break;
     case 223: /* trigger_event */
 {
-#line 1370 "parse.y"
+#line 1371 "parse.y"
 sqlite3IdListDelete(pParse->db, (yypminor->yy10).b);
 #line 1554 "parse.c"
 }
@@ -3405,219 +3405,220 @@ static void yy_reduce(
       case 201: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm ON nm LP sortlist RP where_opt */
 #line 1239 "parse.y"
 {
-  sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0, 
+  assert(yymsp[0].minor.yy362 == NULL);
+  sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0,
                      sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0), yymsp[-2].minor.yy382, yymsp[-9].minor.yy52,
                       &yymsp[-10].minor.yy0, yymsp[0].minor.yy362, SQLITE_SO_ASC, yymsp[-7].minor.yy52, SQLITE_IDXTYPE_APPDEF);
 }
-#line 3413 "parse.c"
+#line 3414 "parse.c"
         break;
       case 202: /* uniqueflag ::= UNIQUE */
       case 243: /* raisetype ::= ABORT */ yytestcase(yyruleno==243);
-#line 1246 "parse.y"
+#line 1247 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ABORT;}
-#line 3419 "parse.c"
+#line 3420 "parse.c"
         break;
       case 203: /* uniqueflag ::= */
-#line 1247 "parse.y"
+#line 1248 "parse.y"
 {yymsp[1].minor.yy52 = ON_CONFLICT_ACTION_NONE;}
-#line 3424 "parse.c"
+#line 3425 "parse.c"
         break;
       case 206: /* eidlist ::= eidlist COMMA nm collate sortorder */
-#line 1290 "parse.y"
+#line 1291 "parse.y"
 {
   yymsp[-4].minor.yy382 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy382, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy52, yymsp[0].minor.yy52);
 }
-#line 3431 "parse.c"
+#line 3432 "parse.c"
         break;
       case 207: /* eidlist ::= nm collate sortorder */
-#line 1293 "parse.y"
+#line 1294 "parse.y"
 {
   yymsp[-2].minor.yy382 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy52, yymsp[0].minor.yy52); /*A-overwrites-Y*/
 }
-#line 3438 "parse.c"
+#line 3439 "parse.c"
         break;
       case 210: /* cmd ::= DROP INDEX ifexists fullname ON nm */
-#line 1304 "parse.y"
+#line 1305 "parse.y"
 {
     sqlite3DropIndex(pParse, yymsp[-2].minor.yy387, &yymsp[0].minor.yy0, yymsp[-3].minor.yy52);
 }
-#line 3445 "parse.c"
+#line 3446 "parse.c"
         break;
       case 211: /* cmd ::= PRAGMA nm */
-#line 1311 "parse.y"
+#line 1312 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[0].minor.yy0,0,0,0,0);
 }
-#line 3452 "parse.c"
+#line 3453 "parse.c"
         break;
       case 212: /* cmd ::= PRAGMA nm EQ nmnum */
-#line 1314 "parse.y"
+#line 1315 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy0,0,0);
 }
-#line 3459 "parse.c"
+#line 3460 "parse.c"
         break;
       case 213: /* cmd ::= PRAGMA nm LP nmnum RP */
-#line 1317 "parse.y"
+#line 1318 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,0,&yymsp[-1].minor.yy0,0,0);
 }
-#line 3466 "parse.c"
+#line 3467 "parse.c"
         break;
       case 214: /* cmd ::= PRAGMA nm EQ minus_num */
-#line 1320 "parse.y"
+#line 1321 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy0,0,1);
 }
-#line 3473 "parse.c"
+#line 3474 "parse.c"
         break;
       case 215: /* cmd ::= PRAGMA nm LP minus_num RP */
-#line 1323 "parse.y"
+#line 1324 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,0,&yymsp[-1].minor.yy0,0,1);
 }
-#line 3480 "parse.c"
+#line 3481 "parse.c"
         break;
       case 216: /* cmd ::= PRAGMA nm EQ nm DOT nm */
-#line 1326 "parse.y"
+#line 1327 "parse.y"
 {
     sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,0,&yymsp[0].minor.yy0,&yymsp[-2].minor.yy0,0);
 }
-#line 3487 "parse.c"
+#line 3488 "parse.c"
         break;
       case 217: /* cmd ::= PRAGMA */
-#line 1329 "parse.y"
+#line 1330 "parse.y"
 {
     sqlite3Pragma(pParse, 0,0,0,0,0);
 }
-#line 3494 "parse.c"
+#line 3495 "parse.c"
         break;
       case 220: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
-#line 1349 "parse.y"
+#line 1350 "parse.y"
 {
   Token all;
   all.z = yymsp[-3].minor.yy0.z;
   all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
   sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy427, &all);
 }
-#line 3504 "parse.c"
+#line 3505 "parse.c"
         break;
       case 221: /* trigger_decl ::= TRIGGER ifnotexists nm trigger_time trigger_event ON fullname foreach_clause when_clause */
-#line 1358 "parse.y"
+#line 1359 "parse.y"
 {
   sqlite3BeginTrigger(pParse, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy52, yymsp[-4].minor.yy10.a, yymsp[-4].minor.yy10.b, yymsp[-2].minor.yy387, yymsp[0].minor.yy362, yymsp[-7].minor.yy52);
   yymsp[-8].minor.yy0 = yymsp[-6].minor.yy0; /*yymsp[-8].minor.yy0-overwrites-T*/
 }
-#line 3512 "parse.c"
+#line 3513 "parse.c"
         break;
       case 222: /* trigger_time ::= BEFORE */
-#line 1364 "parse.y"
+#line 1365 "parse.y"
 { yymsp[0].minor.yy52 = TK_BEFORE; }
-#line 3517 "parse.c"
+#line 3518 "parse.c"
         break;
       case 223: /* trigger_time ::= AFTER */
-#line 1365 "parse.y"
+#line 1366 "parse.y"
 { yymsp[0].minor.yy52 = TK_AFTER;  }
-#line 3522 "parse.c"
+#line 3523 "parse.c"
         break;
       case 224: /* trigger_time ::= INSTEAD OF */
-#line 1366 "parse.y"
+#line 1367 "parse.y"
 { yymsp[-1].minor.yy52 = TK_INSTEAD;}
-#line 3527 "parse.c"
+#line 3528 "parse.c"
         break;
       case 225: /* trigger_time ::= */
-#line 1367 "parse.y"
+#line 1368 "parse.y"
 { yymsp[1].minor.yy52 = TK_BEFORE; }
-#line 3532 "parse.c"
+#line 3533 "parse.c"
         break;
       case 226: /* trigger_event ::= DELETE|INSERT */
       case 227: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==227);
-#line 1371 "parse.y"
+#line 1372 "parse.y"
 {yymsp[0].minor.yy10.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy10.b = 0;}
-#line 3538 "parse.c"
+#line 3539 "parse.c"
         break;
       case 228: /* trigger_event ::= UPDATE OF idlist */
-#line 1373 "parse.y"
+#line 1374 "parse.y"
 {yymsp[-2].minor.yy10.a = TK_UPDATE; yymsp[-2].minor.yy10.b = yymsp[0].minor.yy40;}
-#line 3543 "parse.c"
+#line 3544 "parse.c"
         break;
       case 229: /* when_clause ::= */
-#line 1380 "parse.y"
+#line 1381 "parse.y"
 { yymsp[1].minor.yy362 = 0; }
-#line 3548 "parse.c"
+#line 3549 "parse.c"
         break;
       case 230: /* when_clause ::= WHEN expr */
-#line 1381 "parse.y"
+#line 1382 "parse.y"
 { yymsp[-1].minor.yy362 = yymsp[0].minor.yy162.pExpr; }
-#line 3553 "parse.c"
+#line 3554 "parse.c"
         break;
       case 231: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
-#line 1385 "parse.y"
+#line 1386 "parse.y"
 {
   assert( yymsp[-2].minor.yy427!=0 );
   yymsp[-2].minor.yy427->pLast->pNext = yymsp[-1].minor.yy427;
   yymsp[-2].minor.yy427->pLast = yymsp[-1].minor.yy427;
 }
-#line 3562 "parse.c"
+#line 3563 "parse.c"
         break;
       case 232: /* trigger_cmd_list ::= trigger_cmd SEMI */
-#line 1390 "parse.y"
+#line 1391 "parse.y"
 { 
   assert( yymsp[-1].minor.yy427!=0 );
   yymsp[-1].minor.yy427->pLast = yymsp[-1].minor.yy427;
 }
-#line 3570 "parse.c"
+#line 3571 "parse.c"
         break;
       case 233: /* trnm ::= nm DOT nm */
-#line 1401 "parse.y"
+#line 1402 "parse.y"
 {
   yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;
   sqlite3ErrorMsg(pParse, 
         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
         "statements within triggers");
 }
-#line 3580 "parse.c"
+#line 3581 "parse.c"
         break;
       case 234: /* tridxby ::= INDEXED BY nm */
-#line 1413 "parse.y"
+#line 1414 "parse.y"
 {
   sqlite3ErrorMsg(pParse,
         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
         "within triggers");
 }
-#line 3589 "parse.c"
+#line 3590 "parse.c"
         break;
       case 235: /* tridxby ::= NOT INDEXED */
-#line 1418 "parse.y"
+#line 1419 "parse.y"
 {
   sqlite3ErrorMsg(pParse,
         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
         "within triggers");
 }
-#line 3598 "parse.c"
+#line 3599 "parse.c"
         break;
       case 236: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */
-#line 1431 "parse.y"
+#line 1432 "parse.y"
 {yymsp[-6].minor.yy427 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy382, yymsp[0].minor.yy362, yymsp[-5].minor.yy52);}
-#line 3603 "parse.c"
+#line 3604 "parse.c"
         break;
       case 237: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */
-#line 1435 "parse.y"
+#line 1436 "parse.y"
 {yymsp[-4].minor.yy427 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy40, yymsp[0].minor.yy279, yymsp[-4].minor.yy52);/*A-overwrites-R*/}
-#line 3608 "parse.c"
+#line 3609 "parse.c"
         break;
       case 238: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */
-#line 1439 "parse.y"
+#line 1440 "parse.y"
 {yymsp[-4].minor.yy427 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy362);}
-#line 3613 "parse.c"
+#line 3614 "parse.c"
         break;
       case 239: /* trigger_cmd ::= select */
-#line 1443 "parse.y"
+#line 1444 "parse.y"
 {yymsp[0].minor.yy427 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy279); /*A-overwrites-X*/}
-#line 3618 "parse.c"
+#line 3619 "parse.c"
         break;
       case 240: /* expr ::= RAISE LP IGNORE RP */
-#line 1446 "parse.y"
+#line 1447 "parse.y"
 {
   spanSet(&yymsp[-3].minor.yy162,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-X*/
   yymsp[-3].minor.yy162.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0); 
@@ -3625,10 +3626,10 @@ static void yy_reduce(
     yymsp[-3].minor.yy162.pExpr->affinity = ON_CONFLICT_ACTION_IGNORE;
   }
 }
-#line 3629 "parse.c"
+#line 3630 "parse.c"
         break;
       case 241: /* expr ::= RAISE LP raisetype COMMA STRING RP */
-#line 1453 "parse.y"
+#line 1454 "parse.y"
 {
   spanSet(&yymsp[-5].minor.yy162,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);  /*A-overwrites-X*/
   yymsp[-5].minor.yy162.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); 
@@ -3636,85 +3637,85 @@ static void yy_reduce(
     yymsp[-5].minor.yy162.pExpr->affinity = (char)yymsp[-3].minor.yy52;
   }
 }
-#line 3640 "parse.c"
+#line 3641 "parse.c"
         break;
       case 242: /* raisetype ::= ROLLBACK */
-#line 1463 "parse.y"
+#line 1464 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_ROLLBACK;}
-#line 3645 "parse.c"
+#line 3646 "parse.c"
         break;
       case 244: /* raisetype ::= FAIL */
-#line 1465 "parse.y"
+#line 1466 "parse.y"
 {yymsp[0].minor.yy52 = ON_CONFLICT_ACTION_FAIL;}
-#line 3650 "parse.c"
+#line 3651 "parse.c"
         break;
       case 245: /* cmd ::= DROP TRIGGER ifexists fullname */
-#line 1470 "parse.y"
+#line 1471 "parse.y"
 {
   sqlite3DropTrigger(pParse,yymsp[0].minor.yy387,yymsp[-1].minor.yy52);
 }
-#line 3657 "parse.c"
+#line 3658 "parse.c"
         break;
       case 246: /* cmd ::= REINDEX */
-#line 1477 "parse.y"
+#line 1478 "parse.y"
 {sqlite3Reindex(pParse, 0, 0);}
-#line 3662 "parse.c"
+#line 3663 "parse.c"
         break;
       case 247: /* cmd ::= REINDEX nm */
-#line 1478 "parse.y"
+#line 1479 "parse.y"
 {sqlite3Reindex(pParse, &yymsp[0].minor.yy0, 0);}
-#line 3667 "parse.c"
+#line 3668 "parse.c"
         break;
       case 248: /* cmd ::= REINDEX nm ON nm */
-#line 1479 "parse.y"
+#line 1480 "parse.y"
 {sqlite3Reindex(pParse, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
-#line 3672 "parse.c"
+#line 3673 "parse.c"
         break;
       case 249: /* cmd ::= ANALYZE */
-#line 1484 "parse.y"
+#line 1485 "parse.y"
 {sqlite3Analyze(pParse, 0);}
-#line 3677 "parse.c"
+#line 3678 "parse.c"
         break;
       case 250: /* cmd ::= ANALYZE nm */
-#line 1485 "parse.y"
+#line 1486 "parse.y"
 {sqlite3Analyze(pParse, &yymsp[0].minor.yy0);}
-#line 3682 "parse.c"
+#line 3683 "parse.c"
         break;
       case 251: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
-#line 1490 "parse.y"
+#line 1491 "parse.y"
 {
   sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy387,&yymsp[0].minor.yy0);
 }
-#line 3689 "parse.c"
+#line 3690 "parse.c"
         break;
       case 252: /* with ::= */
-#line 1513 "parse.y"
+#line 1514 "parse.y"
 {yymsp[1].minor.yy151 = 0;}
-#line 3694 "parse.c"
+#line 3695 "parse.c"
         break;
       case 253: /* with ::= WITH wqlist */
-#line 1515 "parse.y"
+#line 1516 "parse.y"
 { yymsp[-1].minor.yy151 = yymsp[0].minor.yy151; }
-#line 3699 "parse.c"
+#line 3700 "parse.c"
         break;
       case 254: /* with ::= WITH RECURSIVE wqlist */
-#line 1516 "parse.y"
+#line 1517 "parse.y"
 { yymsp[-2].minor.yy151 = yymsp[0].minor.yy151; }
-#line 3704 "parse.c"
+#line 3705 "parse.c"
         break;
       case 255: /* wqlist ::= nm eidlist_opt AS LP select RP */
-#line 1518 "parse.y"
+#line 1519 "parse.y"
 {
   yymsp[-5].minor.yy151 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy382, yymsp[-1].minor.yy279); /*A-overwrites-X*/
 }
-#line 3711 "parse.c"
+#line 3712 "parse.c"
         break;
       case 256: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
-#line 1521 "parse.y"
+#line 1522 "parse.y"
 {
   yymsp[-7].minor.yy151 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy151, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy382, yymsp[-1].minor.yy279);
 }
-#line 3718 "parse.c"
+#line 3719 "parse.c"
         break;
       default:
       /* (257) input ::= ecmd */ yytestcase(yyruleno==257);
@@ -3825,7 +3826,7 @@ static void yy_syntax_error(
   } else {
     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
   }
-#line 3829 "parse.c"
+#line 3830 "parse.c"
 /************ End %syntax_error code ******************************************/
   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
 }
diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index 914fc53..c14622f 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -1237,7 +1237,8 @@ paren_exprlist(A) ::= LP exprlist(X) RP.  {A = X;}
 //
 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X)
         ON nm(Y) LP sortlist(Z) RP where_opt(W). {
-  sqlite3CreateIndex(pParse, &X, 
+  assert(W == NULL);
+  sqlite3CreateIndex(pParse, &X,
                      sqlite3SrcListAppend(pParse->db,0,&Y), Z, U,
                       &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
 }
diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
index 4ce575e..472bad7 100755
--- a/test/sql-tap/analyze9.test.lua
+++ b/test/sql-tap/analyze9.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(124)
+test:plan(118)
 
 testprefix = "analyze9"
 
@@ -1105,82 +1105,82 @@ test:do_execsql_test(
 ---------------------------------------------------------------------------
 -- Test that stat4 data may be used with partial indexes.
 --
-test:do_test(
-    17.1,
-    function()
-        test:execsql([[
-            DROP TABLE IF EXISTS t1;
-            CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, a, b, c, d);
-            CREATE INDEX i1 ON t1(a, b) WHERE d IS NOT NULL;
-            INSERT INTO t1 VALUES(null, -1, -1, -1, NULL);
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
-        ]])
-        local b = 0
-        for i = 0, 31 do
-            if (i < 8) then
-                b = 0
-            else
-                b = i
-        end
-        test:execsql(string.format(" INSERT INTO t1 VALUES(null, %s%%2, %s, %s/2, 'abc') ", i, b, i))
-    end
-    return test:execsql("ANALYZE")
-    end, {
-        -- <17.1>
-        -- </17.1>
-    })
+--test:do_test(
+--    17.1,
+--    function()
+--        test:execsql([[
+--            DROP TABLE IF EXISTS t1;
+--            CREATE TABLE t1(id INTEGER PRIMARY KEY AUTOINCREMENT, a, b, c, d);
+--            CREATE INDEX i1 ON t1(a, b) WHERE d IS NOT NULL;
+--            INSERT INTO t1 VALUES(null, -1, -1, -1, NULL);
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--            INSERT INTO t1 SELECT null, 2*a,2*b,2*c,d FROM t1;
+--        ]])
+--        local b = 0
+--        for i = 0, 31 do
+--            if (i < 8) then
+--                b = 0
+--            else
+--                b = i
+--        end
+--        test:execsql(string.format(" INSERT INTO t1 VALUES(null, %s%%2, %s, %s/2, 'abc') ", i, b, i))
+--    end
+--    return test:execsql("ANALYZE")
+--    end, {
+--        -- <17.1>
+--        -- </17.1>
+--    })
 
-test:do_execsql_test(
-    17.2,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
-    ]], {
-        -- <17.2>
-        0, 0, 0, 'SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)'
-        -- </17.2>
-    })
+--test:do_execsql_test(
+--    17.2,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
+--    ]], {
+--        -- <17.2>
+--        0, 0, 0, 'SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)'
+--        -- </17.2>
+--    })
 
-test:do_execsql_test(
-    17.3,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
-    ]], {
-        -- <17.3>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)"
-        -- </17.3>
-    })
+--test:do_execsql_test(
+--    17.3,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
+--    ]], {
+--        -- <17.3>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I1 (A=? AND B=?)"
+--        -- </17.3>
+--    })
 
-test:do_execsql_test(
-    17.4,
-    [[
-        CREATE INDEX i2 ON t1(c, d);
-        ANALYZE;
-    ]])
+--test:do_execsql_test(
+--    17.4,
+--    [[
+--        CREATE INDEX i2 ON t1(c, d);
+--        ANALYZE;
+--    ]])
 
-test:do_execsql_test(
-    17.5,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
-    ]], {
-        -- <17.5>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
-        -- </17.5>
-    })
+--test:do_execsql_test(
+--    17.5,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=10 AND c=10;
+--    ]], {
+--        -- <17.5>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
+--        -- </17.5>
+--    })
 
-test:do_execsql_test(
-    17.6,
-    [[
-        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
-    ]], {
-        -- <17.6>
-        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
-        -- </17.6>
-    })
+--test:do_execsql_test(
+--   17.6,
+--    [[
+--        EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE d IS NOT NULL AND a=0 AND b=0 AND c=10;
+--    ]], {
+--        -- <17.6>
+--        0, 0, 0, "SEARCH TABLE T1 USING COVERING INDEX I2 (C=? AND D>?)"
+--        -- </17.6>
+--    })
 
 ---------------------------------------------------------------------------
 
diff --git a/test/sql-tap/autoindex4.test.lua b/test/sql-tap/autoindex4.test.lua
index 45bae48..874aad7 100755
--- a/test/sql-tap/autoindex4.test.lua
+++ b/test/sql-tap/autoindex4.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(7)
+test:plan(6)
 
 --!./tcltestrunner.lua
 -- 2014-10-24
@@ -108,22 +108,22 @@ test:do_execsql_test(
         -- </autoindex4-3.0>
     })
 
-test:do_execsql_test(
-    "autoindex4-3.1",
-    [[
-        CREATE INDEX Items_x1 ON Items(ItemName,Name) WHERE ItemName = 'dummy';
-
-        SELECT Items.ItemName
-          FROM Items
-            LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
-            LEFT JOIN B ON (B.Name = Items.ItemName)
-          WHERE Items.Name = 'Parent'
-          ORDER BY Items.ItemName;
-    ]], {
-        -- <autoindex4-3.1>
-        "Item1", "Item2"
-        -- </autoindex4-3.1>
-    })
+--test:do_execsql_test(
+--    "autoindex4-3.1",
+--    [[
+--        CREATE INDEX Items_x1 ON Items(ItemName,Name) WHERE ItemName = 'dummy';
+--
+--        SELECT Items.ItemName
+--         FROM Items
+--            LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
+--            LEFT JOIN B ON (B.Name = Items.ItemName)
+--          WHERE Items.Name = 'Parent'
+--          ORDER BY Items.ItemName;
+--    ]], {
+--        -- <autoindex4-3.1>
+--        "Item1", "Item2"
+--        -- </autoindex4-3.1>
+--    })
 
 test:finish_test()
 
diff --git a/test/sql-tap/fkey1.test.lua b/test/sql-tap/fkey1.test.lua
index 8749e1f..7c36efe 100755
--- a/test/sql-tap/fkey1.test.lua
+++ b/test/sql-tap/fkey1.test.lua
@@ -1,6 +1,7 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(19)
+test:plan(16)
+
 
 -- This file implements regression tests for foreign keys.
 
@@ -208,36 +209,36 @@ test:do_execsql_test(
         -- </fkey1-5.6>
     })
 
-test:do_execsql_test(
-    "fkey1-6.1",
-    [[
-        CREATE TABLE p1(id PRIMARY KEY, x, y);
-        CREATE UNIQUE INDEX p1x ON p1(x) WHERE y<2;
-        INSERT INTO p1 VALUES(1, 1, 1);
-        CREATE TABLE c1(a PRIMARY KEY REFERENCES p1(x));
-    ]], {
-        -- <fkey1-6.1>
-        -- </fkey1-6.1>
-    })
-
-test:do_catchsql_test(
-    "fkey1-6.2",
-    [[
-        INSERT INTO c1 VALUES(1);
-    ]], {
-        -- <fkey1-6.2>
-        1, "foreign key mismatch - \"C1\" referencing \"P1\""
-        -- </fkey1-6.2>
-    })
-
-test:do_execsql_test(
-    "fkey1-6.3",
-    [[
-        CREATE UNIQUE INDEX p1x2 ON p1(x);
-        INSERT INTO c1 VALUES(1);
-    ]], {
-        -- <fkey1-6.3>
-        -- </fkey1-6.3>
-    })
+--test:do_execsql_test(
+--    "fkey1-6.1",
+--    [[
+--        CREATE TABLE p1(id PRIMARY KEY, x, y);
+--        CREATE UNIQUE INDEX p1x ON p1(x) WHERE y<2;
+--        INSERT INTO p1 VALUES(1, 1, 1);
+--        CREATE TABLE c1(a PRIMARY KEY REFERENCES p1(x));
+--    ]], {
+--        -- <fkey1-6.1>
+--        -- </fkey1-6.1>
+--    })
+
+--test:do_catchsql_test(
+--    "fkey1-6.2",
+--    [[
+--        INSERT INTO c1 VALUES(1);
+--    ]], {
+--        -- <fkey1-6.2>
+--        1, "foreign key mismatch - \"C1\" referencing \"P1\""
+--        -- </fkey1-6.2>
+--    })
+
+--test:do_execsql_test(
+--    "fkey1-6.3",
+--    [[
+--        CREATE UNIQUE INDEX p1x2 ON p1(x);
+--        INSERT INTO c1 VALUES(1);
+--    ]], {
+--        -- <fkey1-6.3>
+--        -- </fkey1-6.3>
+--    })
 
 test:finish_test()
diff --git a/test/sql-tap/index6.test.lua b/test/sql-tap/index6.test.lua
index 2aa97e8..d2edc56 100755
--- a/test/sql-tap/index6.test.lua
+++ b/test/sql-tap/index6.test.lua
@@ -1,6 +1,7 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(14)
+test:plan(0)
+
 
 --!./tcltestrunner.lua
 -- 2013-07-31
@@ -220,34 +221,34 @@ test:plan(14)
 -- 2014-04-13: Partial index causes assertion fault on UPDATE OR REPLACE.
 --
 -- MUST_WORK_TEST #2311 partial index
-if 0>0 then
-test:do_execsql_test(
-    "index6-6.0",
-    [[
-        CREATE TABLE t6(a,b, PRIMARY KEY (a,b));
-        CREATE INDEX t6b ON t6(b) WHERE b=1;
-        INSERT INTO t6(a,b) VALUES(123,456);
-        SELECT * FROM t6;
-    ]], {
-        -- <index6-6.0>
-        123, 456
-        -- </index6-6.0>
-    })
-else
-    test:execsql("CREATE TABLE t6(a,b, PRIMARY KEY (a,b));")
-    test:execsql("INSERT INTO t6(a,b) VALUES(123,456);")
-end
+--if 0>0 then
+--test:do_execsql_test(
+--    "index6-6.0",
+--    [[
+--        CREATE TABLE t6(a,b, PRIMARY KEY (a,b));
+--        CREATE INDEX t6b ON t6(b) WHERE b=1;
+--        INSERT INTO t6(a,b) VALUES(123,456);
+--        SELECT * FROM t6;
+--    ]], {
+--        -- <index6-6.0>
+--        123, 456
+--        -- </index6-6.0>
+--    })
+--else
+--    test:execsql("CREATE TABLE t6(a,b, PRIMARY KEY (a,b));")
+--    test:execsql("INSERT INTO t6(a,b) VALUES(123,456);")
+--end
 
-test:do_execsql_test(
-    "index6-6.1",
-    [[
-        UPDATE OR REPLACE t6 SET b=789;
-        SELECT * FROM t6;
-    ]], {
-        -- <index6-6.1>
-        123, 789
-        -- </index6-6.1>
-    })
+--test:do_execsql_test(
+--    "index6-6.1",
+--    [[
+--        UPDATE OR REPLACE t6 SET b=789;
+--        SELECT * FROM t6;
+--    ]], {
+--        -- <index6-6.1>
+--        123, 789
+--        -- </index6-6.1>
+--    })
 
 -- do_execsql_test index6-6.2 {
 -- } {ok}
@@ -256,212 +257,212 @@ test:do_execsql_test(
 -- the ON clause of a LEFT JOIN was causing incorrect results for all
 -- versions of SQLite 3.8.0 through 3.8.8.
 --
-test:do_execsql_test(
-    "index6-7.0",
-    [[
-        CREATE TABLE t7a(id primary key, x);
-        CREATE TABLE t7b(id primary key, y);
-        INSERT INTO t7a VALUES(1, 1);
-        CREATE INDEX t7ax ON t7a(x) WHERE x=99;
-        SELECT x,y FROM t7a LEFT JOIN t7b ON (x=99) ORDER BY x;
-    ]], {
-        -- <index6-7.0>
-        1, ""
-        -- </index6-7.0>
-    })
-
-test:do_execsql_test(
-    "index6-7.1",
-    [[
-        INSERT INTO t7b VALUES(1, 2);
-        SELECT x,y FROM t7a JOIN t7b ON (x=99) ORDER BY x;
-    ]], {
-        -- <index6-7.1>
-        
-        -- </index6-7.1>
-    })
+--test:do_execsql_test(
+--    "index6-7.0",
+--    [[
+--        CREATE TABLE t7a(id primary key, x);
+--        CREATE TABLE t7b(id primary key, y);
+--        INSERT INTO t7a VALUES(1, 1);
+--        CREATE INDEX t7ax ON t7a(x) WHERE x=99;
+--        SELECT x,y FROM t7a LEFT JOIN t7b ON (x=99) ORDER BY x;
+--    ]], {
+--        -- <index6-7.0>
+--        1, ""
+--        -- </index6-7.0>
+--    })
 
-test:do_execsql_test(
-    "index6-7.2",
-    [[
-        INSERT INTO t7a VALUES(2, 99);
-        SELECT x,y FROM t7a LEFT JOIN t7b ON (x=99) ORDER BY x;
-    ]], {
-        -- <index6-7.2>
-        1, "", 99, 2
-        -- </index6-7.2>
-    })
-
-test:do_execsql_test(
-    "index6-7.3",
-    [[
-        SELECT x,y FROM t7a JOIN t7b ON (x=99) ORDER BY x;
-    ]], {
-        -- <index6-7.3>
-        99, 2
-        -- </index6-7.3>
-    })
+--test:do_execsql_test(
+--    "index6-7.1",
+--    [[
+--        INSERT INTO t7b VALUES(1, 2);
+--        SELECT x,y FROM t7a JOIN t7b ON (x=99) ORDER BY x;
+--    ]], {
+--        -- <index6-7.1>
+--
+--        -- </index6-7.1>
+--    })
 
-test:do_execsql_test(
-    "index6-7.4",
-    [[
-        EXPLAIN QUERY PLAN
-        SELECT x,y FROM t7a JOIN t7b ON (x=99) ORDER BY x;
-    ]], {
-        -- <index6-7.4>
-        "/USING COVERING INDEX T7AX/"
-        -- </index6-7.4>
-    })
+--test:do_execsql_test(
+--    "index6-7.2",
+--    [[
+--        INSERT INTO t7a VALUES(2, 99);
+--        SELECT x,y FROM t7a LEFT JOIN t7b ON (x=99) ORDER BY x;
+--    ]], {
+--        -- <index6-7.2>
+--        1, "", 99, 2
+--        -- </index6-7.2>
+--    })
 
-test:do_execsql_test(
-    "index6-8.0",
-    [[
-        CREATE TABLE t8a(id primary key, a,b);
-        CREATE TABLE t8b(id primary key, x,y);
-        CREATE INDEX i8c ON t8b(y) WHERE x = 'value';
+--test:do_execsql_test(
+--    "index6-7.3",
+--    [[
+--        SELECT x,y FROM t7a JOIN t7b ON (x=99) ORDER BY x;
+--    ]], {
+--        -- <index6-7.3>
+--        99, 2
+--        -- </index6-7.3>
+--    })
 
-        INSERT INTO t8a VALUES(1, 1, 'one');
-        INSERT INTO t8a VALUES(2, 2, 'two');
-        INSERT INTO t8a VALUES(3, 3, 'three');
+--test:do_execsql_test(
+--    "index6-7.4",
+--    [[
+--        EXPLAIN QUERY PLAN
+--        SELECT x,y FROM t7a JOIN t7b ON (x=99) ORDER BY x;
+--    ]], {
+--        -- <index6-7.4>
+--        "/USING COVERING INDEX T7AX/"
+--        -- </index6-7.4>
+--    })
 
-        INSERT INTO t8b VALUES(1, 'value', 1);
-        INSERT INTO t8b VALUES(2, 'dummy', 2);
-        INSERT INTO t8b VALUES(3, 'value', 3);
-        INSERT INTO t8b VALUES(4, 'dummy', 4);
-    ]], {
-        -- <index6-8.0>
-        
-        -- </index6-8.0>
-    })
+--test:do_execsql_test(
+--   "index6-8.0",
+--    [[
+--        CREATE TABLE t8a(id primary key, a,b);
+--        CREATE TABLE t8b(id primary key, x,y);
+--        CREATE INDEX i8c ON t8b(y) WHERE x = 'value';
+--
+--        INSERT INTO t8a VALUES(1, 1, 'one');
+--        INSERT INTO t8a VALUES(2, 2, 'two');
+--        INSERT INTO t8a VALUES(3, 3, 'three');
+--
+--        INSERT INTO t8b VALUES(1, 'value', 1);
+--        INSERT INTO t8b VALUES(2, 'dummy', 2);
+--        INSERT INTO t8b VALUES(3, 'value', 3);
+--        INSERT INTO t8b VALUES(4, 'dummy', 4);
+--    ]], {
+--        -- <index6-8.0>
+--        
+--        -- </index6-8.0>
+--    })
 
-test:do_eqp_test(
-    "index6-8.1",
-    [[
-        SELECT * FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a)
-    ]], {
-        -- <index6-8.1>
-    {0, 0, 0, "SCAN TABLE T8A"},
-    {0, 1, 1, "SEARCH TABLE T8B USING COVERING INDEX I8C (Y=?)"}
-        -- </index6-8.1>
-    })
+--test:do_eqp_test(
+--    "index6-8.1",
+--    [[
+--        SELECT * FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a)
+--    ]], {
+--        -- <index6-8.1>
+--    {0, 0, 0, "SCAN TABLE T8A"},
+--    {0, 1, 1, "SEARCH TABLE T8B USING COVERING INDEX I8C (Y=?)"}
+--        -- </index6-8.1>
+--    })
 
-test:do_execsql_test(
-    "index6-8.2",
-    [[
-        SELECT a,b,x,y FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a)
-    ]], {
-        -- <index6-8.2>
-        1, "one", "value", 1, 2, "two", "", "", 3, "three", "value", 3
-        -- </index6-8.2>
-    })
+--test:do_execsql_test(
+--    "index6-8.2",
+--    [[
+--        SELECT a,b,x,y FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a)
+--    ]], {
+--        -- <index6-8.2>
+--        1, "one", "value", 1, 2, "two", "", "", 3, "three", "value", 3
+--        -- </index6-8.2>
+--    })
 
 -- MUST_WORK_TEST
-if (0 > 0)
- then
-    -- 2015-06-11.  Assertion fault found by AFL
-    --
-    test:do_execsql_test(
-        "index6-9.1",
-        [[
-            CREATE TABLE t9(a int, b int, c int);
-            CREATE INDEX t9ca ON t9(c,a) WHERE a in (10,12,20);
-            INSERT INTO t9 VALUES(1,1,9),(10,2,35),(11,15,82),(20,19,5),(NULL,7,3);
-            UPDATE t9 SET b=c WHERE a in (10,12,20);
-            SELECT a,b,c,'|' FROM t9 ORDER BY a;
-        ]], {
-            -- <index6-9.1>
-            "", 7, 3, "|", 1, 1, 9, "|", 10, 35, 35, "|", 11, 15, 82, "|", 20, 5, 5, "|"
-            -- </index6-9.1>
-        })
+--if (0 > 0)
+-- then
+--    -- 2015-06-11.  Assertion fault found by AFL
+--    --
+--    test:do_execsql_test(
+--        "index6-9.1",
+--        [[
+--            CREATE TABLE t9(a int, b int, c int);
+--            CREATE INDEX t9ca ON t9(c,a) WHERE a in (10,12,20);
+--            INSERT INTO t9 VALUES(1,1,9),(10,2,35),(11,15,82),(20,19,5),(NULL,7,3);
+--            UPDATE t9 SET b=c WHERE a in (10,12,20);
+--            SELECT a,b,c,'|' FROM t9 ORDER BY a;
+--        ]], {
+--            -- <index6-9.1>
+--            "", 7, 3, "|", 1, 1, 9, "|", 10, 35, 35, "|", 11, 15, 82, "|", 20, 5, 5, "|"
+--            -- </index6-9.1>
+--        })
 
-test:do_execsql_test(
-    "index6-9.2",
-    [[
-        --DROP TABLE t9;
-        CREATE TABLE t9(a int, b int, c int, PRIMARY KEY(a));
-        CREATE INDEX t9ca ON t9(c,a) WHERE a in (10,12,20);
-        INSERT INTO t9 VALUES(1,1,9),(10,2,35),(11,15,82),(20,19,5);
-        UPDATE t9 SET b=c WHERE a in (10,12,20);
-        SELECT a,b,c,'|' FROM t9 ORDER BY a;
-    ]], {
-        -- <index6-9.2>
-        1, 1, 9, "|", 10, 35, 35, "|", 11, 15, 82, "|", 20, 5, 5, "|"
-        -- </index6-9.2>
-    })
-end
+--test:do_execsql_test(
+--    "index6-9.2",
+--    [[
+--        --DROP TABLE t9;
+--        CREATE TABLE t9(a int, b int, c int, PRIMARY KEY(a));
+--        CREATE INDEX t9ca ON t9(c,a) WHERE a in (10,12,20);
+--        INSERT INTO t9 VALUES(1,1,9),(10,2,35),(11,15,82),(20,19,5);
+--        UPDATE t9 SET b=c WHERE a in (10,12,20);
+--        SELECT a,b,c,'|' FROM t9 ORDER BY a;
+--    ]], {
+--        -- <index6-9.2>
+--        1, 1, 9, "|", 10, 35, 35, "|", 11, 15, 82, "|", 20, 5, 5, "|"
+--        -- </index6-9.2>
+--    })
+--end
 -- AND-connected terms in the WHERE clause of a partial index
 --
-test:do_execsql_test(
-    "index6-10.1",
-    [[
-        CREATE TABLE t10(a,b,c,d,e INTEGER PRIMARY KEY);
-        INSERT INTO t10 VALUES
-          (1,2,3,4,5),
-          (2,3,4,5,6),
-          (3,4,5,6,7),
-          (1,2,3,8,9);
-        CREATE INDEX t10x ON t10(d) WHERE a=1 AND b=2 AND c=3;
-        SELECT e FROM t10 WHERE a=1 AND b=2 AND c=3 ORDER BY d;
-    ]], {
-        -- <index6-10.1>
-        5, 9
-        -- </index6-10.1>
-    })
+--test:do_execsql_test(
+--    "index6-10.1",
+--    [[
+--        CREATE TABLE t10(a,b,c,d,e INTEGER PRIMARY KEY);
+--        INSERT INTO t10 VALUES
+--          (1,2,3,4,5),
+--          (2,3,4,5,6),
+--          (3,4,5,6,7),
+--          (1,2,3,8,9);
+--        CREATE INDEX t10x ON t10(d) WHERE a=1 AND b=2 AND c=3;
+--        SELECT e FROM t10 WHERE a=1 AND b=2 AND c=3 ORDER BY d;
+--    ]], {
+--        -- <index6-10.1>
+--        5, 9
+--        -- </index6-10.1>
+--    })
 
-test:do_execsql_test(
-    "index6-10.1eqp",
-    [[
-        EXPLAIN QUERY PLAN
-        SELECT e FROM t10 WHERE a=1 AND b=2 AND c=3 ORDER BY d;
-    ]], {
-        -- <index6-10.1eqp>
-        "/USING COVERING INDEX T10X/"
-        -- </index6-10.1eqp>
-    })
+--test:do_execsql_test(
+--    "index6-10.1eqp",
+--    [[
+--        EXPLAIN QUERY PLAN
+--        SELECT e FROM t10 WHERE a=1 AND b=2 AND c=3 ORDER BY d;
+--    ]], {
+--        -- <index6-10.1eqp>
+--        "/USING COVERING INDEX T10X/"
+--        -- </index6-10.1eqp>
+--    })
 
-test:do_execsql_test(
-    "index6-10.2",
-    [[
-        SELECT e FROM t10 WHERE c=3 AND 2=b AND a=1 ORDER BY d DESC;
-    ]], {
-        -- <index6-10.2>
-        9, 5
-        -- </index6-10.2>
-    })
+--test:do_execsql_test(
+--    "index6-10.2",
+--    [[
+--        SELECT e FROM t10 WHERE c=3 AND 2=b AND a=1 ORDER BY d DESC;
+--    ]], {
+--        -- <index6-10.2>
+--       9, 5
+--        -- </index6-10.2>
+--    })
 
-test:do_execsql_test(
-    "index6-10.2eqp",
-    [[
-        EXPLAIN QUERY PLAN
-        SELECT e FROM t10 WHERE c=3 AND 2=b AND a=1 ORDER BY d DESC;
-    ]], {
-        -- <index6-10.2eqp>
-        "/USING COVERING INDEX T10X/"
-        -- </index6-10.2eqp>
-    })
+--test:do_execsql_test(
+--    "index6-10.2eqp",
+--    [[
+--        EXPLAIN QUERY PLAN
+--        SELECT e FROM t10 WHERE c=3 AND 2=b AND a=1 ORDER BY d DESC;
+--    ]], {
+--        -- <index6-10.2eqp>
+--        "/USING COVERING INDEX T10X/"
+--        -- </index6-10.2eqp>
+--    })
 
-test:do_execsql_test(
-    "index6-10.3",
-    [[
-        SELECT e FROM t10 WHERE a=1 AND b=2 ORDER BY d DESC;
-    ]], {
-        -- <index6-10.3>
-        9, 5
-        -- </index6-10.3>
-    })
+--test:do_execsql_test(
+--    "index6-10.3",
+--    [[
+--        SELECT e FROM t10 WHERE a=1 AND b=2 ORDER BY d DESC;
+--    ]], {
+--        -- <index6-10.3>
+--        9, 5
+--        -- </index6-10.3>
+--    })
 
 -- MUST_WORK_TEST why did plan change?
-if 0>0 then
-test:do_execsql_test(
-    "index6-10.3eqp",
-    [[
-        EXPLAIN QUERY PLAN
-        SELECT e FROM t10 WHERE a=1 AND b=2 ORDER BY d DESC;
-    ]], {
-        -- <index6-10.3eqp>
-        "~/USING", "INDEX", "t10x/"
-        -- </index6-10.3eqp>
-    })
-end
-
+--if 0>0 then
+--test:do_execsql_test(
+--    "index6-10.3eqp",
+--    [[
+--        EXPLAIN QUERY PLAN
+--        SELECT e FROM t10 WHERE a=1 AND b=2 ORDER BY d DESC;
+--    ]], {
+--        -- <index6-10.3eqp>
+--        "~/USING", "INDEX", "t10x/"
+--        -- </index6-10.3eqp>
+--    })
+--end
+--garbej test
 test:finish_test()
diff --git a/test/sql-tap/index7.test.lua b/test/sql-tap/index7.test.lua
index c8f56eb..97ac194 100755
--- a/test/sql-tap/index7.test.lua
+++ b/test/sql-tap/index7.test.lua
@@ -1,6 +1,7 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(5)
+test:plan(1)
+
 
 --!./tcltestrunner.lua
 -- 2013-11-04
@@ -258,47 +259,47 @@ test:do_execsql_test(
         -- </index7-6.1>
     })
 
-test:do_execsql_test(
-    "index7-6.2",
-    [[
-        CREATE INDEX i4 ON t4(c) WHERE d='xyz';
-        SELECT a,b,c,d FROM (SELECT a,b FROM t5 WHERE a=1 AND b='xyz'), t4 WHERE c='abc';
-    ]], {
-        -- <index7-6.2>
-        1, "xyz", "abc", "not xyz"
-        -- </index7-6.2>
-    })
+--test:do_execsql_test(
+--    "index7-6.2",
+--    [[
+--        CREATE INDEX i4 ON t4(c) WHERE d='xyz';
+--        SELECT a,b,c,d FROM (SELECT a,b FROM t5 WHERE a=1 AND b='xyz'), t4 WHERE c='abc';
+--    ]], {
+--        -- <index7-6.2>
+--        1, "xyz", "abc", "not xyz"
+--        -- </index7-6.2>
+--    })
 
-test:do_execsql_test(
-    "index7-6.3",
-    [[
-        CREATE VIEW v4 AS SELECT c,d FROM t4;
-        INSERT INTO t4 VALUES(2, 'def', 'xyz');
-        SELECT * FROM v4 WHERE d='xyz' AND c='def'
-    ]], {
-        -- <index7-6.3>
-        "def", "xyz"
-        -- </index7-6.3>
-    })
+--test:do_execsql_test(
+--    "index7-6.3",
+--    [[
+--        CREATE VIEW v4 AS SELECT c,d FROM t4;
+--        INSERT INTO t4 VALUES(2, 'def', 'xyz');
+--        SELECT * FROM v4 WHERE d='xyz' AND c='def'
+--    ]], {
+--        -- <index7-6.3>
+--        "def", "xyz"
+--        -- </index7-6.3>
+--    })
 
-test:do_eqp_test(
-    "index7-6.4",
-    [[
-        SELECT * FROM v4 WHERE d='xyz' AND c='def'
-    ]], {
-        -- <index7-6.4>
-    {0, 0, 0, "SEARCH TABLE T4 USING COVERING INDEX I4 (C=?)"}
-        -- </index7-6.4>
-    })
+--test:do_eqp_test(
+--    "index7-6.4",
+--    [[
+--        SELECT * FROM v4 WHERE d='xyz' AND c='def'
+--    ]], {
+--        -- <index7-6.4>
+--    {0, 0, 0, "SEARCH TABLE T4 USING COVERING INDEX I4 (C=?)"}
+--        -- </index7-6.4>
+--    })
 
-test:do_catchsql_test(
-    "index7-6.5",
-    [[
-        CREATE INDEX t5a ON t5(a) WHERE a=#1;
-    ]], {
-        -- <index7-6.5>
-        1, [[near "#1": syntax error]]
-        -- </index7-6.5>
-    })
+--test:do_catchsql_test(
+--    "index7-6.5",
+--    [[
+--        CREATE INDEX t5a ON t5(a) WHERE a=#1;
+--    ]], {
+--        -- <index7-6.5>
+--        1, [[near "#1": syntax error]]
+--        -- </index7-6.5>
+--    })
 
 test:finish_test()
-- 
2.7.4




More information about the Tarantool-patches mailing list