⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.y

📁 一个小型的嵌入式数据库
💻 Y
📖 第 1 页 / 共 3 页
字号:
escape(X) ::= .               [ESCAPE] {X = 0;}expr(A) ::= expr(X) likeop(OP) expr(Y) escape(E).  [LIKE]  {  ExprList *pList = sqlite3ExprListAppend(0, Y, 0);  pList = sqlite3ExprListAppend(pList, X, 0);  if( E ){    pList = sqlite3ExprListAppend(pList, E, 0);  }  A = sqlite3ExprFunction(pList, 0);  if( A ) A->op = OP.opcode;  if( OP.not ) A = sqlite3Expr(TK_NOT, A, 0, 0);  sqlite3ExprSpan(A, &X->span, &Y->span);}expr(A) ::= expr(X) ISNULL(E). {  A = sqlite3Expr(TK_ISNULL, X, 0, 0);  sqlite3ExprSpan(A,&X->span,&E);}expr(A) ::= expr(X) IS NULL(E). {  A = sqlite3Expr(TK_ISNULL, X, 0, 0);  sqlite3ExprSpan(A,&X->span,&E);}expr(A) ::= expr(X) NOTNULL(E). {  A = sqlite3Expr(TK_NOTNULL, X, 0, 0);  sqlite3ExprSpan(A,&X->span,&E);}expr(A) ::= expr(X) NOT NULL(E). {  A = sqlite3Expr(TK_NOTNULL, X, 0, 0);  sqlite3ExprSpan(A,&X->span,&E);}expr(A) ::= expr(X) IS NOT NULL(E). {  A = sqlite3Expr(TK_NOTNULL, X, 0, 0);  sqlite3ExprSpan(A,&X->span,&E);}expr(A) ::= NOT(B) expr(X). {  A = sqlite3Expr(@B, X, 0, 0);  sqlite3ExprSpan(A,&B,&X->span);}expr(A) ::= BITNOT(B) expr(X). {  A = sqlite3Expr(@B, X, 0, 0);  sqlite3ExprSpan(A,&B,&X->span);}expr(A) ::= MINUS(B) expr(X). [UMINUS] {  A = sqlite3Expr(TK_UMINUS, X, 0, 0);  sqlite3ExprSpan(A,&B,&X->span);}expr(A) ::= PLUS(B) expr(X). [UPLUS] {  A = sqlite3Expr(TK_UPLUS, X, 0, 0);  sqlite3ExprSpan(A,&B,&X->span);}%type between_op {int}between_op(A) ::= BETWEEN.     {A = 0;}between_op(A) ::= NOT BETWEEN. {A = 1;}expr(A) ::= expr(W) between_op(N) expr(X) AND expr(Y). [BETWEEN] {  ExprList *pList = sqlite3ExprListAppend(0, X, 0);  pList = sqlite3ExprListAppend(pList, Y, 0);  A = sqlite3Expr(TK_BETWEEN, W, 0, 0);  if( A ) A->pList = pList;  if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0);  sqlite3ExprSpan(A,&W->span,&Y->span);}%ifndef SQLITE_OMIT_SUBQUERY  %type in_op {int}  in_op(A) ::= IN.      {A = 0;}  in_op(A) ::= NOT IN.  {A = 1;}  expr(A) ::= expr(X) in_op(N) LP exprlist(Y) RP(E). [IN] {    A = sqlite3Expr(TK_IN, X, 0, 0);    if( A ) A->pList = Y;    if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0);    sqlite3ExprSpan(A,&X->span,&E);  }  expr(A) ::= LP(B) select(X) RP(E). {    A = sqlite3Expr(TK_SELECT, 0, 0, 0);    if( A ) A->pSelect = X;    sqlite3ExprSpan(A,&B,&E);  }  expr(A) ::= expr(X) in_op(N) LP select(Y) RP(E).  [IN] {    A = sqlite3Expr(TK_IN, X, 0, 0);    if( A ) A->pSelect = Y;    if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0);    sqlite3ExprSpan(A,&X->span,&E);  }  expr(A) ::= expr(X) in_op(N) nm(Y) dbnm(Z). [IN] {    SrcList *pSrc = sqlite3SrcListAppend(0,&Y,&Z);    A = sqlite3Expr(TK_IN, X, 0, 0);    if( A ) A->pSelect = sqlite3SelectNew(0,pSrc,0,0,0,0,0,0,0);    if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0);    sqlite3ExprSpan(A,&X->span,Z.z?&Z:&Y);  }  expr(A) ::= EXISTS(B) LP select(Y) RP(E). {    Expr *p = A = sqlite3Expr(TK_EXISTS, 0, 0, 0);    if( p ){      p->pSelect = Y;      sqlite3ExprSpan(p,&B,&E);    }  }%endif // SQLITE_OMIT_SUBQUERY/* CASE expressions */expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). {  A = sqlite3Expr(TK_CASE, X, Z, 0);  if( A ) A->pList = Y;  sqlite3ExprSpan(A, &C, &E);}%type case_exprlist {ExprList*}%destructor case_exprlist {sqlite3ExprListDelete($$);}case_exprlist(A) ::= case_exprlist(X) WHEN expr(Y) THEN expr(Z). {  A = sqlite3ExprListAppend(X, Y, 0);  A = sqlite3ExprListAppend(A, Z, 0);}case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {  A = sqlite3ExprListAppend(0, Y, 0);  A = sqlite3ExprListAppend(A, Z, 0);}%type case_else {Expr*}case_else(A) ::=  ELSE expr(X).         {A = X;}case_else(A) ::=  .                     {A = 0;} %type case_operand {Expr*}case_operand(A) ::= expr(X).            {A = X;} case_operand(A) ::= .                   {A = 0;} %type exprlist {ExprList*}%destructor exprlist {sqlite3ExprListDelete($$);}%type expritem {Expr*}%destructor expritem {sqlite3ExprDelete($$);}exprlist(A) ::= exprlist(X) COMMA expritem(Y).                                         {A = sqlite3ExprListAppend(X,Y,0);}exprlist(A) ::= expritem(X).            {A = sqlite3ExprListAppend(0,X,0);}expritem(A) ::= expr(X).                {A = X;}expritem(A) ::= .                       {A = 0;}///////////////////////////// The CREATE INDEX command /////////////////////////cmd ::= CREATE(S) uniqueflag(U) INDEX nm(X) dbnm(D)        ON nm(Y) LP idxlist(Z) RP(E) onconf(R). {  if( U!=OE_None ) U = R;  if( U==OE_Default) U = OE_Abort;  sqlite3CreateIndex(pParse, &X, &D, sqlite3SrcListAppend(0,&Y,0),Z,U, &S, &E);}%type uniqueflag {int}uniqueflag(A) ::= UNIQUE.  {A = OE_Abort;}uniqueflag(A) ::= .        {A = OE_None;}%type idxlist {ExprList*}%destructor idxlist {sqlite3ExprListDelete($$);}%type idxlist_opt {ExprList*}%destructor idxlist_opt {sqlite3ExprListDelete($$);}%type idxitem {Token}idxlist_opt(A) ::= .                         {A = 0;}idxlist_opt(A) ::= LP idxlist(X) RP.         {A = X;}idxlist(A) ::= idxlist(X) COMMA idxitem(Y) collate(C) sortorder.  {  Expr *p = 0;  if( C.n>0 ){    p = sqlite3Expr(TK_COLUMN, 0, 0, 0);    if( p ) p->pColl = sqlite3LocateCollSeq(pParse, C.z, C.n);  }  A = sqlite3ExprListAppend(X, p, &Y);}idxlist(A) ::= idxitem(Y) collate(C) sortorder. {  Expr *p = 0;  if( C.n>0 ){    p = sqlite3Expr(TK_COLUMN, 0, 0, 0);    if( p ) p->pColl = sqlite3LocateCollSeq(pParse, C.z, C.n);  }  A = sqlite3ExprListAppend(0, p, &Y);}idxitem(A) ::= nm(X).              {A = X;}///////////////////////////// The DROP INDEX command ///////////////////////////cmd ::= DROP INDEX fullname(X).   {sqlite3DropIndex(pParse, X);}///////////////////////////// The VACUUM command ///////////////////////////////cmd ::= VACUUM.                {sqlite3Vacuum(pParse,0);}cmd ::= VACUUM nm.             {sqlite3Vacuum(pParse,0);}///////////////////////////// The PRAGMA command ///////////////////////////////%ifndef SQLITE_OMIT_PRAGMAcmd ::= PRAGMA nm(X) dbnm(Z) EQ nm(Y).  {sqlite3Pragma(pParse,&X,&Z,&Y,0);}cmd ::= PRAGMA nm(X) dbnm(Z) EQ ON(Y).  {sqlite3Pragma(pParse,&X,&Z,&Y,0);}cmd ::= PRAGMA nm(X) dbnm(Z) EQ plus_num(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);}cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y). {  sqlite3Pragma(pParse,&X,&Z,&Y,1);}cmd ::= PRAGMA nm(X) dbnm(Z) LP nm(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}cmd ::= PRAGMA nm(X) dbnm(Z).             {sqlite3Pragma(pParse,&X,&Z,0,0);}%endif // SQLITE_OMIT_PRAGMAplus_num(A) ::= plus_opt number(X).   {A = X;}minus_num(A) ::= MINUS number(X).     {A = X;}number(A) ::= INTEGER(X).             {A = X;}number(A) ::= FLOAT(X).               {A = X;}plus_opt ::= PLUS.plus_opt ::= .//////////////////////////// The CREATE TRIGGER command /////////////////////%ifndef SQLITE_OMIT_TRIGGERcmd ::= CREATE trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {  Token all;  all.z = A.z;  all.n = (Z.z - A.z) + Z.n;  sqlite3FinishTrigger(pParse, S, &all);}trigger_decl(A) ::= temp(T) TRIGGER nm(B) dbnm(Z) trigger_time(C)                    trigger_event(D)                    ON fullname(E) foreach_clause(F) when_clause(G). {  sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, F, G, T);  A = (Z.n==0?B:Z);}%type trigger_time  {int}trigger_time(A) ::= BEFORE.      { A = TK_BEFORE; }trigger_time(A) ::= AFTER.       { A = TK_AFTER;  }trigger_time(A) ::= INSTEAD OF.  { A = TK_INSTEAD;}trigger_time(A) ::= .            { A = TK_BEFORE; }%type trigger_event {struct TrigEvent}%destructor trigger_event {sqlite3IdListDelete($$.b);}trigger_event(A) ::= DELETE(OP).              {A.a = @OP; A.b = 0;}trigger_event(A) ::= INSERT(OP).              {A.a = @OP; A.b = 0;}trigger_event(A) ::= UPDATE(OP).              {A.a = @OP; A.b = 0;}trigger_event(A) ::= UPDATE OF inscollist(X). {A.a = TK_UPDATE; A.b = X;}%type foreach_clause {int}foreach_clause(A) ::= .                   { A = TK_ROW; }foreach_clause(A) ::= FOR EACH ROW.       { A = TK_ROW; }foreach_clause(A) ::= FOR EACH STATEMENT. { A = TK_STATEMENT; }%type when_clause {Expr*}when_clause(A) ::= .             { A = 0; }when_clause(A) ::= WHEN expr(X). { A = X; }%type trigger_cmd_list {TriggerStep*}%destructor trigger_cmd_list {sqlite3DeleteTriggerStep($$);}trigger_cmd_list(A) ::= trigger_cmd(X) SEMI trigger_cmd_list(Y). {  X->pNext = Y;  A = X;}trigger_cmd_list(A) ::= . { A = 0; }%type trigger_cmd {TriggerStep*}%destructor trigger_cmd {sqlite3DeleteTriggerStep($$);}// UPDATE trigger_cmd(A) ::= UPDATE orconf(R) nm(X) SET setlist(Y) where_opt(Z).                 { A = sqlite3TriggerUpdateStep(&X, Y, Z, R); }// INSERTtrigger_cmd(A) ::= insert_cmd(R) INTO nm(X) inscollist_opt(F)                    VALUES LP itemlist(Y) RP.                 {A = sqlite3TriggerInsertStep(&X, F, Y, 0, R);}trigger_cmd(A) ::= insert_cmd(R) INTO nm(X) inscollist_opt(F) select(S).               {A = sqlite3TriggerInsertStep(&X, F, 0, S, R);}// DELETEtrigger_cmd(A) ::= DELETE FROM nm(X) where_opt(Y).               {A = sqlite3TriggerDeleteStep(&X, Y);}// SELECTtrigger_cmd(A) ::= select(X).  {A = sqlite3TriggerSelectStep(X); }// The special RAISE expression that may occur in trigger programsexpr(A) ::= RAISE(X) LP IGNORE RP(Y).  {  A = sqlite3Expr(TK_RAISE, 0, 0, 0);   A->iColumn = OE_Ignore;  sqlite3ExprSpan(A, &X, &Y);}expr(A) ::= RAISE(X) LP raisetype(T) COMMA nm(Z) RP(Y).  {  A = sqlite3Expr(TK_RAISE, 0, 0, &Z);   A->iColumn = T;  sqlite3ExprSpan(A, &X, &Y);}%endif // !SQLITE_OMIT_TRIGGER%type raisetype {int}raisetype(A) ::= ROLLBACK.  {A = OE_Rollback;}raisetype(A) ::= ABORT.     {A = OE_Abort;}raisetype(A) ::= FAIL.      {A = OE_Fail;}////////////////////////  DROP TRIGGER statement //////////////////////////////%ifndef SQLITE_OMIT_TRIGGERcmd ::= DROP TRIGGER fullname(X). {  sqlite3DropTrigger(pParse,X);}%endif // !SQLITE_OMIT_TRIGGER//////////////////////// ATTACH DATABASE file AS name /////////////////////////cmd ::= ATTACH database_kw_opt ids(F) AS nm(D) key_opt(K). {  sqlite3Attach(pParse, &F, &D, K.type, &K.key);}%type key_opt {struct AttachKey}key_opt(A) ::= .                     { A.type = 0; }key_opt(A) ::= KEY ids(X).           { A.type=1; A.key = X; }key_opt(A) ::= KEY BLOB(X).          { A.type=2; A.key = X; }database_kw_opt ::= DATABASE.database_kw_opt ::= .//////////////////////// DETACH DATABASE name /////////////////////////////////cmd ::= DETACH database_kw_opt nm(D). {  sqlite3Detach(pParse, &D);}////////////////////////// REINDEX collation //////////////////////////////////%ifndef SQLITE_OMIT_REINDEXcmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}cmd ::= REINDEX nm(X) dbnm(Y).  {sqlite3Reindex(pParse, &X, &Y);}%endif//////////////////////// ALTER TABLE table ... ////////////////////////////////%ifndef SQLITE_OMIT_ALTERTABLEcmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {  sqlite3AlterRenameTable(pParse,X,&Z);}%endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -