MXS-1391 Parse CREATE OR REPLACE
This commit is contained in:
@ -21,6 +21,10 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=array-bounds")
|
|||||||
|
|
||||||
add_library(qc_sqlite SHARED qc_sqlite.cc qc_sqlite3.c builtin_functions.c)
|
add_library(qc_sqlite SHARED qc_sqlite.cc qc_sqlite3.c builtin_functions.c)
|
||||||
add_dependencies(qc_sqlite maxscale_sqlite)
|
add_dependencies(qc_sqlite maxscale_sqlite)
|
||||||
|
# If you feel a need to add something here, check also the handling of 'enable_maxscale'
|
||||||
|
# in sqlite-src-3110100/configure.
|
||||||
|
# In configure we have defined SQLITE_OMIT_VIRTUALTABLE, but it cannot be defined here,
|
||||||
|
# although conceptually is should, as one needed static function in case will be missing.
|
||||||
add_definitions(-DMAXSCALE -DSQLITE_THREADSAFE=0 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT -DSQLITE_OMIT_ATTACH -DSQLITE_OMIT_REINDEX -DSQLITE_OMIT_AUTOVACUUM -DSQLITE_OMIT_PRAGMA )
|
add_definitions(-DMAXSCALE -DSQLITE_THREADSAFE=0 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT -DSQLITE_OMIT_ATTACH -DSQLITE_OMIT_REINDEX -DSQLITE_OMIT_AUTOVACUUM -DSQLITE_OMIT_PRAGMA )
|
||||||
|
|
||||||
set_target_properties(qc_sqlite PROPERTIES VERSION "1.0.0")
|
set_target_properties(qc_sqlite PROPERTIES VERSION "1.0.0")
|
||||||
|
|||||||
@ -11506,7 +11506,9 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test "${enable_maxscale}" = "yes" ; then
|
if test "${enable_maxscale}" = "yes" ; then
|
||||||
OPT_FEATURE_FLAGS="$OPT_FEATURE_FLAGS -DMAXSCALE -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT -DSQLITE_OMIT_ATTACH -DSQLITE_OMIT_REINDEX -DSQLITE_OMIT_AUTOVACUUM -DSQLITE_OMIT_PRAGMA"
|
# If something is added here, check the obvious 'add_definitions'
|
||||||
|
# in ../CMakeLists.txt
|
||||||
|
OPT_FEATURE_FLAGS="$OPT_FEATURE_FLAGS -DMAXSCALE -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT -DSQLITE_OMIT_ATTACH -DSQLITE_OMIT_REINDEX -DSQLITE_OMIT_AUTOVACUUM -DSQLITE_OMIT_PRAGMA -DSQLITE_OMIT_VIRTUALTABLE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#########
|
#########
|
||||||
|
|||||||
@ -384,10 +384,21 @@ create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). {
|
|||||||
sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
|
sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
%ifdef MAXSCALE
|
||||||
|
or_replace_opt ::= .
|
||||||
|
or_replace_opt ::= OR REPLACE.
|
||||||
|
|
||||||
|
createkw(A) ::= CREATE(X) or_replace_opt. {
|
||||||
|
disableLookaside(pParse);
|
||||||
|
A = X;
|
||||||
|
}
|
||||||
|
%endif
|
||||||
|
%ifndef MAXSCALE
|
||||||
createkw(A) ::= CREATE(X). {
|
createkw(A) ::= CREATE(X). {
|
||||||
disableLookaside(pParse);
|
disableLookaside(pParse);
|
||||||
A = X;
|
A = X;
|
||||||
}
|
}
|
||||||
|
%endif
|
||||||
%type ifnotexists {int}
|
%type ifnotexists {int}
|
||||||
ifnotexists(A) ::= . {A = 0;}
|
ifnotexists(A) ::= . {A = 0;}
|
||||||
ifnotexists(A) ::= IF NOT EXISTS. {A = 1;}
|
ifnotexists(A) ::= IF NOT EXISTS. {A = 1;}
|
||||||
@ -904,9 +915,6 @@ ifexists(A) ::= . {A = 0;}
|
|||||||
//
|
//
|
||||||
%ifndef SQLITE_OMIT_VIEW
|
%ifndef SQLITE_OMIT_VIEW
|
||||||
%ifdef MAXSCALE
|
%ifdef MAXSCALE
|
||||||
or_replace_opt ::= .
|
|
||||||
or_replace_opt ::= OR REPLACE.
|
|
||||||
|
|
||||||
%type algorithm {int}
|
%type algorithm {int}
|
||||||
algorithm(A) ::= UNDEFINED. {A=0;}
|
algorithm(A) ::= UNDEFINED. {A=0;}
|
||||||
algorithm(A) ::= MERGE. {A=0;}
|
algorithm(A) ::= MERGE. {A=0;}
|
||||||
@ -916,7 +924,7 @@ algorithm(A) ::= TEMPTABLE. {A=1;}
|
|||||||
algorithm_opt(A) ::= . {A=0;}
|
algorithm_opt(A) ::= . {A=0;}
|
||||||
algorithm_opt(A) ::= ALGORITHM EQ algorithm(X). {A=X;}
|
algorithm_opt(A) ::= ALGORITHM EQ algorithm(X). {A=X;}
|
||||||
|
|
||||||
cmd ::= createkw(X) or_replace_opt algorithm_opt(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
|
cmd ::= createkw(X) algorithm_opt(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
|
||||||
AS select(S). {
|
AS select(S). {
|
||||||
mxs_sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
|
mxs_sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
|
||||||
sqlite3SelectDelete(pParse->db, S);
|
sqlite3SelectDelete(pParse->db, S);
|
||||||
|
|||||||
@ -87,3 +87,5 @@ select names from t;
|
|||||||
|
|
||||||
call p1();
|
call p1();
|
||||||
call p1(@var);
|
call p1(@var);
|
||||||
|
|
||||||
|
create or replace table t (a int);
|
||||||
|
|||||||
Reference in New Issue
Block a user