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

📄 parse.y

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 Y
📖 第 1 页 / 共 3 页
字号:
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;  }else{    sqlite3ExprListDelete(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;      sqlite3ExprSetHeight(A);    }else{      sqlite3ExprListDelete(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;      sqlite3ExprSetHeight(A);    }else{      sqlite3SelectDelete(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;      sqlite3ExprSetHeight(A);    }else{      sqlite3SelectDelete(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);      sqlite3ExprSetHeight(A);    }else{      sqlite3SrcListDelete(pSrc);    }    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);      sqlite3ExprSetHeight(A);    }else{      sqlite3SelectDelete(Y);    }  }%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;    sqlite3ExprSetHeight(A);  }else{    sqlite3ExprListDelete(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*}%destructor case_else {sqlite3ExprDelete($$);}case_else(A) ::=  ELSE expr(X).         {A = X;}case_else(A) ::=  .                     {A = 0;} %type case_operand {Expr*}%destructor case_operand {sqlite3ExprDelete($$);}case_operand(A) ::= expr(X).            {A = X;} case_operand(A) ::= .                   {A = 0;} %type exprlist {ExprList*}%destructor exprlist {sqlite3ExprListDelete($$);}%type nexprlist {ExprList*}%destructor nexprlist {sqlite3ExprListDelete($$);}exprlist(A) ::= nexprlist(X).                {A = X;}exprlist(A) ::= .                            {A = 0;}nexprlist(A) ::= nexprlist(X) COMMA expr(Y). {A = sqlite3ExprListAppend(X,Y,0);}nexprlist(A) ::= expr(Y).                    {A = sqlite3ExprListAppend(0,Y,0);}///////////////////////////// The CREATE INDEX command /////////////////////////cmd ::= CREATE(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)        ON nm(Y) LP idxlist(Z) RP(E). {  sqlite3CreateIndex(pParse, &X, &D, sqlite3SrcListAppend(0,&Y,0), Z, U,                      &S, &E, SQLITE_SO_ASC, NE);}%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(Z).  {  Expr *p = 0;  if( C.n>0 ){    p = sqlite3Expr(TK_COLUMN, 0, 0, 0);    if( p ) p->pColl = sqlite3LocateCollSeq(pParse, (char*)C.z, C.n);  }  A = sqlite3ExprListAppend(X, p, &Y);  sqlite3ExprListCheckLength(pParse, A, SQLITE_MAX_COLUMN, "index");  if( A ) A->a[A->nExpr-1].sortOrder = Z;}idxlist(A) ::= idxitem(Y) collate(C) sortorder(Z). {  Expr *p = 0;  if( C.n>0 ){    p = sqlite3Expr(TK_COLUMN, 0, 0, 0);    if( p ) p->pColl = sqlite3LocateCollSeq(pParse, (char*)C.z, C.n);  }  A = sqlite3ExprListAppend(0, p, &Y);  sqlite3ExprListCheckLength(pParse, A, SQLITE_MAX_COLUMN, "index");  if( A ) A->a[A->nExpr-1].sortOrder = Z;}idxitem(A) ::= nm(X).              {A = X;}%type collate {Token}collate(C) ::= .                {C.z = 0; C.n = 0;}collate(C) ::= COLLATE id(X).   {C = X;}///////////////////////////// The DROP INDEX command ///////////////////////////cmd ::= DROP INDEX ifexists(E) fullname(X).   {sqlite3DropIndex(pParse, X, E);}///////////////////////////// The VACUUM command ///////////////////////////////%ifndef SQLITE_OMIT_VACUUM%ifndef SQLITE_OMIT_ATTACHcmd ::= VACUUM.                {sqlite3Vacuum(pParse);}cmd ::= VACUUM nm.             {sqlite3Vacuum(pParse);}%endif  SQLITE_OMIT_ATTACH%endif  SQLITE_OMIT_VACUUM///////////////////////////// The PRAGMA command ///////////////////////////////%ifndef SQLITE_OMIT_PRAGMAcmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(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 minus_num(Y). {  sqlite3Pragma(pParse,&X,&Z,&Y,1);}cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}cmd ::= PRAGMA nm(X) dbnm(Z).             {sqlite3Pragma(pParse,&X,&Z,0,0);}nmnum(A) ::= plus_num(X).             {A = X;}nmnum(A) ::= nm(X).                   {A = X;}%endif SQLITE_OMIT_PRAGMAplus_num(A) ::= plus_opt number(X).   {A = X;}minus_num(A) ::= MINUS number(X).     {A = X;}number(A) ::= INTEGER|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 ifnotexists(NOERR) nm(B) dbnm(Z)                     trigger_time(C) trigger_event(D)                    ON fullname(E) foreach_clause when_clause(G). {  sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);  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|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;}foreach_clause ::= .foreach_clause ::= FOR EACH ROW.%type when_clause {Expr*}%destructor when_clause {sqlite3ExprDelete($$);}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_list(Y) trigger_cmd(X) SEMI. {  if( Y ){    Y->pLast->pNext = X;  }else{    Y = X;  }  Y->pLast = X;  A = Y;}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);   if( A ){    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);   if( A ) {    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 ifexists(NOERR) fullname(X). {  sqlite3DropTrigger(pParse,X,NOERR);}%endif  !SQLITE_OMIT_TRIGGER//////////////////////// ATTACH DATABASE file AS name /////////////////////////%ifndef SQLITE_OMIT_ATTACHcmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {  sqlite3Attach(pParse, F, D, K);}cmd ::= DETACH database_kw_opt expr(D). {  sqlite3Detach(pParse, D);}%type key_opt {Expr *}%destructor key_opt {sqlite3ExprDelete($$);}key_opt(A) ::= .                     { A = 0; }key_opt(A) ::= KEY expr(X).          { A = X; }database_kw_opt ::= DATABASE.database_kw_opt ::= .%endif SQLITE_OMIT_ATTACH////////////////////////// REINDEX collation //////////////////////////////////%ifndef SQLITE_OMIT_REINDEXcmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}cmd ::= REINDEX nm(X) dbnm(Y).  {sqlite3Reindex(pParse, &X, &Y);}%endif  SQLITE_OMIT_REINDEX/////////////////////////////////// ANALYZE ///////////////////////////////////%ifndef SQLITE_OMIT_ANALYZEcmd ::= ANALYZE.                {sqlite3Analyze(pParse, 0, 0);}cmd ::= ANALYZE nm(X) dbnm(Y).  {sqlite3Analyze(pParse, &X, &Y);}%endif//////////////////////// ALTER TABLE table ... ////////////////////////////////%ifndef SQLITE_OMIT_ALTERTABLEcmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {  sqlite3AlterRenameTable(pParse,X,&Z);}cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column(Y). {  sqlite3AlterFinishAddColumn(pParse, &Y);}add_column_fullname ::= fullname(X). {  sqlite3AlterBeginAddColumn(pParse, X);}kwcolumn_opt ::= .kwcolumn_opt ::= COLUMNKW.%endif  SQLITE_OMIT_ALTERTABLE//////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////%ifndef SQLITE_OMIT_VIRTUALTABLEcmd ::= create_vtab.                       {sqlite3VtabFinishParse(pParse,0);}cmd ::= create_vtab LP vtabarglist RP(X).  {sqlite3VtabFinishParse(pParse,&X);}create_vtab ::= CREATE VIRTUAL TABLE nm(X) dbnm(Y) USING nm(Z). {    sqlite3VtabBeginParse(pParse, &X, &Y, &Z);}vtabarglist ::= vtabarg.vtabarglist ::= vtabarglist COMMA vtabarg.vtabarg ::= .                       {sqlite3VtabArgInit(pParse);}vtabarg ::= vtabarg vtabargtoken.vtabargtoken ::= ANY(X).            {sqlite3VtabArgExtend(pParse,&X);}vtabargtoken ::= lp anylist RP(X).  {sqlite3VtabArgExtend(pParse,&X);}lp ::= LP(X).                       {sqlite3VtabArgExtend(pParse,&X);}anylist ::= .anylist ::= anylist ANY(X).         {sqlite3VtabArgExtend(pParse,&X);}%endif  SQLITE_OMIT_VIRTUALTABLE

⌨️ 快捷键说明

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