]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Change the syntax from "GENERATED AS" to "AS MATERIALIZED" so as to match with-generated-as
authordrh <>
Tue, 16 Feb 2021 00:48:51 +0000 (00:48 +0000)
committerdrh <>
Tue, 16 Feb 2021 00:48:51 +0000 (00:48 +0000)
the syntax of PostgreSQL 12+.

FossilOrigin-Name: 78dcddd9697d95629c18131ab0842aa4d08bc3c7451cd0e7a8d83e4dde277bda

manifest
manifest.uuid
src/build.c
src/parse.y
src/select.c
src/sqliteInt.h
tool/mkkeywordhash.c

index 90506ce408672192b33c145a959545744fe06510..f37fdf04d8787f56b8e020c10dde50c8efe5d30e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\sthe\sLIKE\soperator\sfix\sfrom\strunk.
-D 2021-02-15T17:51:32.589
+C Change\sthe\ssyntax\sfrom\s"GENERATED\sAS"\sto\s"AS\sMATERIALIZED"\sso\sas\sto\smatch\nthe\ssyntax\sof\sPostgreSQL\s12+.
+D 2021-02-16T00:48:51.202
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -485,7 +485,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
 F src/btree.c 694020ad8a3af3d79b09f74c8f1421272a419cdea42a13401e3b0f7dea6e9c3e
 F src/btree.h 285f8377aa1353185a32bf455faafa9ff9a0d40d074d60509534d14990c7829e
 F src/btreeInt.h 7614cae30f95b6aed0c7cac7718276a55cfe2c77058cbfd8bef5b75329757331
-F src/build.c 9080db2acc487f91b0ac9a49f6faab3be4709fde80707ac94375e141018c6e12
+F src/build.c a777f43048a09704b75000c11e6c9fea825deafd676cd8f4e5357764f2d2fb06
 F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c 2a322b9a3d75771fb4d99e0702851f4f68dda982507a0f798eefb0712969a410
@@ -530,7 +530,7 @@ F src/os_win.c 77d39873836f1831a9b0b91894fec45ab0e9ca8e067dc8c549e1d1eca1566fe9
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
 F src/pager.c c49952ac5e9cc536778eff528091d79d38b3e45cbeeed4695dc05e207dc6547d
 F src/pager.h 4bf9b3213a4b2bebbced5eaa8b219cf25d4a82f385d093cd64b7e93e5285f66f
-F src/parse.y cb23465fe1f5e9d51a5466a382c0c38386dd43b818c4b703cafe2e3ecf942bfd
+F src/parse.y a6d56266bf453e7fd57f47f39f85f36a8530792cae68f0672f7f03972c112397
 F src/pcache.c 385ff064bca69789d199a98e2169445dc16e4291fa807babd61d4890c3b34177
 F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586
 F src/pcache1.c 6596e10baf3d8f84cc1585d226cf1ab26564a5f5caf85a15757a281ff977d51a
@@ -541,12 +541,12 @@ F src/printf.c 30e92b638fac71dcd85cdea1d12ecfae354c9adee2c71e8e1ae4727cde7c91ed
 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 89e4faf6171e179edf279905e8e45c4f9dd108777dc60716396729fbd7cb045e
 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
-F src/select.c cf08d39bf4ebf53d3bda7a4482b09274fc23a052deb9db69e6ef98fbfa27e9c9
+F src/select.c 0612a4097f86396f6ec000546dbc16479d6bbb9033a29a0dc07213801e9cd83f
 F src/shell.c.in 9ebc74e4f05cfbd0f4a36060fdaeff1da4e9af4458358722bc08c5a1ab9a0879
 F src/sqlite.h.in 8855a19f37ade8dad189a9e48233a2ebe1b46faf469c7eb0906a654e252dcc57
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e
-F src/sqliteInt.h 20ee41712b2eeb4293ea6fe6bdbccc1d766a1889bfe6bad9759040b9ee493617
+F src/sqliteInt.h e9122436bf0b69ef93f1d922805e891cac614db4b5f5b22efe25395a1a168555
 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -1828,7 +1828,7 @@ F tool/max-limits.c cbb635fbb37ae4d05f240bfb5b5270bb63c54439
 F tool/mkautoconfamal.sh f62353eb6c06ab264da027fd4507d09914433dbdcab9cb011cdc18016f1ab3b8
 F tool/mkccode.tcl 86463e68ce9c15d3041610fedd285ce32a5cf7a58fc88b3202b8b76837650dbe x
 F tool/mkctimec.tcl dd183b73ae1c28249669741c250525f0407e579a70482371668fd5f130d9feb3
-F tool/mkkeywordhash.c 9d60becd70cbf34999654de6d35e3c7f05041c3eff9606f60e93f017f9ce0d92
+F tool/mkkeywordhash.c 08b6e4d7a482a7f37a9a0032e7ba968e26624a027b6b2e9ba589be6f5e3d8c2c
 F tool/mkmsvcmin.tcl 6ecab9fe22c2c8de4d82d4c46797bda3d2deac8e763885f5a38d0c44a895ab33
 F tool/mkopcodec.tcl d1b6362bd3aa80d5520d4d6f3765badf01f6c43c
 F tool/mkopcodeh.tcl 352a4319c0ad869eb26442bf7c3b015aa15594c21f1cce5a6420dbe999367c21
@@ -1900,7 +1900,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P d876b287e1d1fdc1db083fb9786889fb82117ec77defdaa078858e1092068166 27d4117980d125975b5e70eeea58a6ab07bcf066e71b5fcb81b822e05afdbab0
-R b4ae42157bd704483725c5bc20f3f8ee
+P 8c8618780a2cb80c0c1f244fa8555ce36501ad7e435a2cfee1030bbdc8d644db
+R ba922d4317c055cbb896732be33e5b20
 U drh
-Z 91f9a7d97988f5dcc7dc66f626a109d2
+Z c9282fd2eefaea59421fc4e9996c1c87
index ca562b25c4e8dcb66f5e0e540dbc9383a938fa3a..b1afeda69a8c3a793a81c6a5df9dc1adf5354703 100644 (file)
@@ -1 +1 @@
-8c8618780a2cb80c0c1f244fa8555ce36501ad7e435a2cfee1030bbdc8d644db
\ No newline at end of file
+78dcddd9697d95629c18131ab0842aa4d08bc3c7451cd0e7a8d83e4dde277bda
\ No newline at end of file
index 015001f25258907bfb7d945df740a6c94a1493b8..99f545e5d17a21648fe8e0ce4fdad4d69b83a7c4 100644 (file)
@@ -5212,11 +5212,13 @@ Cte *sqlite3CteNew(
   Token *pName,           /* Name of the common-table */
   ExprList *pArglist,     /* Optional column name list for the table */
   Select *pQuery,         /* Query used to initialize the table */
-  int bOptBarrier         /* This CTE should be an optimization barrier*/
+  int eMaterialized       /* Force or prohibit materialization */
 ){
   Cte *pNew;
   sqlite3 *db = pParse->db;
 
+  assert( eMaterialized==MAT_NotSpec || eMaterialized==MAT_Yes
+            || eMaterialized==MAT_No );
   pNew = sqlite3DbMallocZero(db, sizeof(*pNew));
   assert( pNew!=0 || db->mallocFailed );
 
@@ -5228,7 +5230,7 @@ Cte *sqlite3CteNew(
     pNew->pCols = pArglist;
     pNew->zName = sqlite3NameFromToken(pParse->db, pName);
     pNew->zCteErr = 0;
-    pNew->bOptBarrier = bOptBarrier;
+    pNew->eMaterialized = (u8)eMaterialized;
   }
   return pNew;
 }
index 6d2e2d551914471b469c4c4bb0c5d8d97e80e68f..110fc5e0a73234b8d02602386d317dbd3f8c98f9 100644 (file)
@@ -247,9 +247,11 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
   CURRENT FOLLOWING PARTITION PRECEDING RANGE UNBOUNDED
   EXCLUDE GROUPS OTHERS TIES
 %endif SQLITE_OMIT_WINDOWFUNC
-  GENERATED
 %ifndef SQLITE_OMIT_GENERATED_COLUMNS
-  ALWAYS
+  GENERATED ALWAYS
+%endif
+%ifndef SQLITE_OMIT_CTE
+  MATERIALIZED
 %endif
   REINDEX RENAME CTIME_KW IF
   .
@@ -1661,16 +1663,17 @@ anylist ::= anylist ANY.
 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
 %type wqitem {Cte*}
 %destructor wqitem {sqlite3CteDelete(pParse->db, $$);}
-%type wqgen {int}
+%type wqas {int}
 
 with ::= .
 %ifndef SQLITE_OMIT_CTE
 with ::= WITH wqlist(W).              { sqlite3WithPush(pParse, W, 1); }
 with ::= WITH RECURSIVE wqlist(W).    { sqlite3WithPush(pParse, W, 1); }
 
-wqgen(A) ::= .           {A=0;}
-wqgen(A) ::= GENERATED.  {A=1;}
-wqitem(A) ::= nm(X) eidlist_opt(Y) wqgen(F) AS LP select(Z) RP. {
+wqas(A)   ::= AS.                   {A=MAT_NotSpec;}
+wqas(A)   ::= AS MATERIALIZED.      {A=MAT_Yes;}
+//wqas(A) ::= AS NOT MATERIALIZED.  {A=MAT_No;}
+wqitem(A) ::= nm(X) eidlist_opt(Y) wqas(F) LP select(Z) RP. {
   A = sqlite3CteNew(pParse, &X, Y, Z, F); /*A-overwrites-X*/
 }
 wqlist(A) ::= wqitem(X). {
index 7866114760771522938261c828f95f282480f991..a476644251242765aea9e9d2e9503fca4d6cfd62 100644 (file)
@@ -4938,7 +4938,9 @@ static int withExpand(
     pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0);
     if( db->mallocFailed ) return SQLITE_NOMEM_BKPT;
     assert( pFrom->pSelect );
-    if( pCte->bOptBarrier ) pFrom->pSelect->selFlags |= SF_OptBarrier;
+    if( pCte->eMaterialized==MAT_Yes ){
+      pFrom->pSelect->selFlags |= SF_OptBarrier;
+    }
 
     /* Check if this is a recursive CTE. */
     pRecTerm = pSel = pFrom->pSelect;
index 9f423d977b154c47cde578f54bf9be171980e871..eca583d1c16d52c57bc90f6c3c45f69703d9ed25 100644 (file)
@@ -3869,6 +3869,13 @@ void sqlite3SelectWalkAssert2(Walker*, Select*);
 #define WRC_Prune       1   /* Omit children but continue walking siblings */
 #define WRC_Abort       2   /* Abandon the tree walk */
 
+/*
+** Allowed values for Cte.eMAterialized
+*/
+#define MAT_NotSpec     0   /* Not specified */
+#define MAT_Yes         1   /* AS MATERIALIZED ... */
+#define MAT_No          2   /* AS NOT MATERIALIZED.  Not currently used */
+
 /*
 ** An instance of this structure represents a set of one or more CTEs
 ** (common table expressions) created by a single WITH clause.
@@ -3878,7 +3885,7 @@ struct Cte {
   ExprList *pCols;              /* List of explicit column names, or NULL */
   Select *pSelect;              /* The definition of this CTE */
   const char *zCteErr;          /* Error message for circular references */
-  u8 bOptBarrier;               /* Treat this CTE as an optimization barrier */
+  u8 eMaterialized;             /* One of the MAT_* values */
 };
 struct With {
   int nCte;                     /* Number of CTEs in the WITH clause */
index c60999c23b53124c44237b3a033d957ccc2b9c94..bbb0ccf29326f87c8ad5e2d8dc9a139afb5d7224 100644 (file)
@@ -255,6 +255,7 @@ static Keyword aKeywordTable[] = {
   { "LIKE",             "TK_LIKE_KW",      ALWAYS,           5      },
   { "LIMIT",            "TK_LIMIT",        ALWAYS,           3      },
   { "MATCH",            "TK_MATCH",        ALWAYS,           2      },
+  { "MATERIALIZED",     "TK_MATERIALIZED", CTE,              12     },
   { "NATURAL",          "TK_JOIN_KW",      ALWAYS,           3      },
   { "NO",               "TK_NO",           FKEY|WINDOWFUNC,  2      },
   { "NOT",              "TK_NOT",          ALWAYS,           10     },