-C Fix\san\stypo\sthat\sbreaks\sthe\sbuild\swhen\sSQLITE_ENABLE_TREE_EXPLAIN\sis\sdefined.
-D 2014-01-04T20:00:14.172
+C Start\sa\snew\sexperimental\sbranch\sfor\ssupport\sof\sOracle-style\sCONNECT\sBY\nsyntax.
+D 2014-01-06T18:32:18.802
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/os_win.c 16eac0961603182ffc10c02b39fe830126538e07
F src/pager.c efa923693e958696eee69b205a20bfbc402c8480
F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
-F src/parse.y acee1a9958539e21263362b194594c5255ad2fca
+F src/parse.y 201902e23b29ecee8e58bbd013733493cee6da86
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
F src/pcache1.c 57fee9a9a617218f5037afbbe49b09da65bde56b
F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc
F tool/logest.c 7ad625cac3d54012b27d468b7af6612f78b9ba75
F tool/mkautoconfamal.sh f8d8dbf7d62f409ebed5134998bf5b51d7266383
-F tool/mkkeywordhash.c 189d76644e373c7d0864c628deb8ce7b4f403591
+F tool/mkkeywordhash.c 86acc19b96361e90e18d2324b3f56af621aeda85
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
F tool/mkpragmatab.tcl 78a77b2c554d534c6f2dc903130186ed15715460
F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P d6fcfc8890489b942e5b3f1bc271835d77c5ef96
-R 92a605458ee112680310df2ab331e715
+P f461e2b3973d0fe6a7b8cb7a3aaab8a30b3e16c0
+R 8ea35e9854af1f75afacc581ccadba4b
+T *branch * connect-by
+T *sym-connect-by *
+T -sym-trunk *
U drh
-Z 1b6a595171700e1d6836f451072293d3
+Z 2785f3b4e9984046b3600748ab3ddac7
-f461e2b3973d0fe6a7b8cb7a3aaab8a30b3e16c0
\ No newline at end of file
+4365ddd62d88dc73c59962cf27a3e038eabdb50b
\ No newline at end of file
Select *pSelect;
};
+/*
+** An instance of this structure stores the optional Oracle Hierarchical
+** Query clauses - the START WITH and CONNECT BY clauses.
+*/
+struct HierarchicalQuery {
+ Expr *pStartWith; /* The START WITH condition */
+ Expr *pConnectBy; /* The CONNECT BY condition */
+};
+
} // end %include
// Input is a single SQL command
multiselect_op(A) ::= UNION ALL. {A = TK_ALL;}
multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP;}
%endif SQLITE_OMIT_COMPOUND_SELECT
-oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
+oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y) hq_opt
groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L.pLimit,L.pOffset);
}
limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
{A.pOffset = X.pExpr; A.pLimit = Y.pExpr;}
+///////// Oracle-style CONNECT BY clauses for hierarchical queries ////////////
+
+%type hq_opt {struct HierarchicalQuery}
+%destructor hq_opt {
+ sqlite3ExprDelete(pParse->db, $$.pStartWith);
+ sqlite3ExprDelete(pParse->db, $$.pConnectBy);
+}
+
+hq_opt(A) ::= START WITH expr(X) CONNECT BY expr(Y).
+ { A.pStartWith=X.pExpr; A.pConnectBy=Y.pExpr; }
+hq_opt(A) ::= CONNECT BY expr(Y). { A.pStartWith=0; A.pConnectBy=Y.pExpr; }
+hq_opt(A) ::= . { A.pStartWith=0; A.pConnectBy=0; }
+
/////////////////////////// The DELETE statement /////////////////////////////
//
%ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
{spanUnaryPrefix(&A,pParse,TK_UMINUS,&X,&B);}
expr(A) ::= PLUS(B) expr(X). [BITNOT]
{spanUnaryPrefix(&A,pParse,TK_UPLUS,&X,&B);}
+expr(A) ::= PRIOR(B) expr(X). [BITNOT]
+ {spanUnaryPrefix(&A,pParse,TK_PRIOR,&X,&B);}
%type between_op {int}
between_op(A) ::= BETWEEN. {A = 0;}
#else
# define AUTOVACUUM 0x00020000
#endif
+#ifdef SQLITE_OMIT_CONNECTBY
+# define CONNECTBY 0
+#else
+# define CONNECTBY 0x00040000
+#endif
/*
** These are the keywords
{ "COLUMN", "TK_COLUMNKW", ALTER },
{ "COMMIT", "TK_COMMIT", ALWAYS },
{ "CONFLICT", "TK_CONFLICT", CONFLICT },
+ { "CONNECT", "TK_CONNECT", CONNECTBY },
{ "CONSTRAINT", "TK_CONSTRAINT", ALWAYS },
{ "CREATE", "TK_CREATE", ALWAYS },
{ "CROSS", "TK_JOIN_KW", ALWAYS },
{ "PLAN", "TK_PLAN", EXPLAIN },
{ "PRAGMA", "TK_PRAGMA", PRAGMA },
{ "PRIMARY", "TK_PRIMARY", ALWAYS },
+ { "PRIOR", "TK_PRIOR", CONNECTBY },
{ "QUERY", "TK_QUERY", EXPLAIN },
{ "RAISE", "TK_RAISE", TRIGGER },
{ "REFERENCES", "TK_REFERENCES", FKEY },
{ "SAVEPOINT", "TK_SAVEPOINT", ALWAYS },
{ "SELECT", "TK_SELECT", ALWAYS },
{ "SET", "TK_SET", ALWAYS },
+ { "START", "TK_START", CONNECTBY },
{ "TABLE", "TK_TABLE", ALWAYS },
{ "TEMP", "TK_TEMP", ALWAYS },
{ "TEMPORARY", "TK_TEMP", ALWAYS },
{ "VALUES", "TK_VALUES", ALWAYS },
{ "VIEW", "TK_VIEW", VIEW },
{ "VIRTUAL", "TK_VIRTUAL", VTAB },
+ { "WITH", "TK_WITH", CONNECTBY },
{ "WITHOUT", "TK_WITHOUT", ALWAYS },
{ "WHEN", "TK_WHEN", ALWAYS },
{ "WHERE", "TK_WHERE", ALWAYS },