Hello ! Here is the parser code for the "SQL PROCEDURE" anyone have any comment on it ?
_____________ ///////////////////// The SQL PREPARE statement ///////////////////////////// %ifndef SQLITE_OMIT_SQL_PREPARED cmd ::= create_prepared.? {sqlite3SqlPreparedFinishParse(pParse,0, 0);} cmd ::= create_prepared LP prepared_arglist RP(X) AS prepared_cmd(S) .? { ? sqlite3SqlPreparedFinishParse(pParse, &X, S); } create_prepared ::= PREPARE ifnotexists(E) nm(X) . { ? sqlite3SqlPreparedBeginParse(pParse, &X, E); } %type prepared_cmd {SqlPreparedStep*} %destructor prepared_cmd {sqlite3SqlPreparedDeletePreparedStep(pParse->db, $$);} // UPDATE prepared_cmd(A) ::= ?? UPDATE orconf(R) nm(X)? SET setlist(Y) where_opt(Z).? ?? { A = sqlite3SqlPreparedUpdateStep(pParse->db, &X, Y, Z, R); } // INSERT prepared_cmd(A) ::= insert_cmd(R) INTO nm(X) idlist_opt(F) select(S). ?????????????? {A = sqlite3SqlPreparedInsertStep(pParse->db, &X, F, S, R);} // DELETE prepared_cmd(A) ::= DELETE FROM nm(X) where_opt(Y). ?????????????? {A = sqlite3SqlPreparedDeleteStep(pParse->db, &X, Y);} // SELECT prepared_cmd(A) ::= select(X).? {A = sqlite3SqlPreparedSelectStep(pParse->db, X); } cmd ::= EXECUTE nm(X) LP? prepared_arglist? RP.??? { ? sqlite3SqlPreparedExecute(pParse, &X); } cmd ::= DEALLOCATE prepare_opt ifexists(E) nm(X). { ? sqlite3SqlPreparedDeallocate(pParse, &X, E); } prepare_opt ::= . prepare_opt ::= PREPARE. prepared_arglist ::= prepared_arg. prepared_arglist ::= prepared_arglist COMMA prepared_arg. prepared_arg ::= .? {sqlite3SqlPreparedArgInit(pParse);} prepared_arg ::= prepared_arg prepared_argtoken. prepared_argtoken ::= ANY(X).? {sqlite3SqlPreparedArgExtend(pParse,&X);} prepared_argtoken ::= prepared_lp prepared_anylist RP(X).? { ? sqlite3SqlPreparedArgExtend(pParse,&X); } prepared_lp ::= LP(X).? {sqlite3SqlPreparedArgExtend(pParse,&X);} prepared_anylist ::= . prepared_anylist ::= prepared_anylist LP prepared_anylist RP. prepared_anylist ::= prepared_anylist ANY. %endif? SQLITE_OMIT_SQL_PREPARED _____________ ?