blob: fb4e3f040d1c538338d84032069049ffd50c8771 [file] [log] [blame]
Index: include/mdbsql.h
===================================================================
RCS file: /cvsroot/mdbtools/mdbtools/include/mdbsql.h,v
retrieving revision 1.9
diff -u -r1.9 mdbsql.h
--- include/mdbsql.h 10 Jan 2004 01:52:56 -0000 1.9
+++ include/mdbsql.h 19 Jan 2004 07:50:51 -0000
@@ -14,6 +14,7 @@
int num_tables;
GPtrArray *tables;
int num_sargs;
+ int max_rows;
GPtrArray *sargs;
MdbTableDef *cur_table;
MdbSargNode *sarg_tree;
@@ -42,7 +43,7 @@
MdbSarg *sarg;
} MdbSQLSarg;
-char *g_input_ptr;
+extern char *g_input_ptr;
#undef YY_INPUT
#define YY_INPUT(b, r, ms) (r = mdb_sql_yyinput(b, ms));
@@ -70,5 +71,6 @@
extern void mdb_sql_listtables(MdbSQL *sql);
extern void mdb_sql_add_not(MdbSQL *sql);
extern void mdb_sql_describe_table(MdbSQL *sql);
-
+int mdbsql_run_query(MdbSQL *sql, char *mybuf);
+void mdb_sql_set_maxrow(MdbSQL *sql,int aMaxrow);
#endif
Index: include/mdbtools.h
===================================================================
RCS file: /cvsroot/mdbtools/mdbtools/include/mdbtools.h,v
retrieving revision 1.27
diff -u -r1.27 mdbtools.h
--- include/mdbtools.h 10 Jan 2004 01:52:56 -0000 1.27
+++ include/mdbtools.h 19 Jan 2004 07:50:52 -0000
@@ -132,7 +132,7 @@
#define IS_JET3(mdb) (mdb->f->jet_version==MDB_VER_JET3)
/* hash to store registered backends */
-GHashTable *mdb_backends;
+extern GHashTable *mdb_backends;
/* forward declarations */
typedef struct mdbindex MdbIndex;
Index: src/libmdb/backend.c
===================================================================
RCS file: /cvsroot/mdbtools/mdbtools/src/libmdb/backend.c,v
retrieving revision 1.11
diff -u -r1.11 backend.c
--- src/libmdb/backend.c 10 Jan 2004 01:52:57 -0000 1.11
+++ src/libmdb/backend.c 19 Jan 2004 07:50:52 -0000
@@ -27,6 +27,7 @@
#include "dmalloc.h"
#endif
+GHashTable *mdb_backends;
/* Access data types */
MdbBackendType mdb_access_types[] = {
*/
Index: src/sql/lexer.l
===================================================================
RCS file: /cvsroot/mdbtools/mdbtools/src/sql/lexer.l,v
retrieving revision 1.6
diff -u -r1.6 lexer.l
--- src/sql/lexer.l 20 Jan 2003 16:04:31 -0000 1.6
+++ src/sql/lexer.l 19 Jan 2004 07:50:59 -0000
@@ -40,13 +40,16 @@
(<=) { return LTEQ; }
(>=) { return GTEQ; }
like { return LIKE; }
+1[ ]=[ ]0 { return MAX0ROW; }
+0[ ]=[ ]1 { return MAX0ROW; }
+
[ \t\r] ;
-\"[A-z][A-z0-9 _]*\" {
+\"[a-zA-Z_][a-zA-Z0-9_ #@i ]*\" {
yylval.name = strdup(&yytext[1]);
yylval.name[strlen(yylval.name)-1]='\0';
return IDENT;
}
-[A-z][A-z0-9_]* { yylval.name = strdup(yytext); return NAME; }
+[a-zA-Z_][a-zA-Z0-9_#@]* { yylval.name = strdup(yytext); return NAME; }
'.*' { yylval.name = strdup(yytext); return STRING; }
([0-9]+|([0-9]*\.[0-9+)([eE][-+]?[0-9]+)?) {
Index: src/sql/mdbsql.c
===================================================================
RCS file: /cvsroot/mdbtools/mdbtools/src/sql/mdbsql.c,v
retrieving revision 1.14
diff -u -r1.14 mdbsql.c
--- src/sql/mdbsql.c 10 Jan 2004 01:52:57 -0000 1.14
+++ src/sql/mdbsql.c 19 Jan 2004 07:51:00 -0000
@@ -31,6 +31,8 @@
#include <wordexp.h>
#endif
+char *g_input_ptr;
+
void
mdb_sql_error(char *fmt, ...)
{
@@ -65,8 +67,38 @@
sql->sargs = g_ptr_array_new();
sql->sarg_tree = NULL;
sql->sarg_stack = NULL;
+ sql->max_rows = -1;
return sql;
+}
+
+ int _parse(MdbSQL *sql, char *buf)
+ {
+ g_input_ptr = buf;
+ /* begin unsafe */
+ _mdb_sql(sql);
+ if (yyparse()) {
+ /* end unsafe */
+ fprintf(stderr, "Couldn't parse SQL\n");
+ mdb_sql_reset(sql);
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+int mdbsql_run_query(MdbSQL *sql, char *mybuf)
+{
+ if (_parse(sql, mybuf) && sql->cur_table) {
+ mdbsql_bind_all(sql);
+ return 1;
+ }
+ else
+ return 0;
+}
+
+void mdb_sql_set_maxrow(MdbSQL *sql,int aMaxrow)
+{
+ sql->max_rows = aMaxrow;
}
MdbSQLSarg *mdb_sql_alloc_sarg()
Index: src/sql/parser.y
===================================================================
RCS file: /cvsroot/mdbtools/mdbtools/src/sql/parser.y,v
retrieving revision 1.7
diff -u -r1.7 parser.y
--- src/sql/parser.y 20 Jan 2003 16:04:31 -0000 1.7
+++ src/sql/parser.y 19 Jan 2004 07:51:01 -0000
@@ -40,7 +40,7 @@
-%token <name> IDENT NAME PATH STRING NUMBER
+%token <name> IDENT NAME PATH STRING NUMBER MAX0ROW
%token SELECT FROM WHERE CONNECT DISCONNECT TO LIST TABLES WHERE AND OR NOT
%token DESCRIBE TABLE
%token LTEQ GTEQ LIKE
@@ -48,6 +48,7 @@
%type <name> database
%type <name> constant
%type <ival> operator
+%type <name> identify
%%
@@ -80,7 +81,11 @@
;
sarg_list:
- sarg
+ MAX0ROW {
+ mdb_sql_set_maxrow(_mdb_sql(NULL), 0);
+ }
+ | sarg
+ | '(' sarg AND sarg_list ')'
| '(' sarg_list ')'
| NOT sarg_list { mdb_sql_add_not(_mdb_sql(NULL)); }
| sarg_list OR sarg_list { mdb_sql_add_or(_mdb_sql(NULL)); }
@@ -88,18 +93,33 @@
;
sarg:
- NAME operator constant {
+ '(' sarg ')'
+ | identify operator constant {
mdb_sql_add_sarg(_mdb_sql(NULL), $1, $2, $3);
free($1);
free($3);
}
- | constant operator NAME {
+ | constant operator identify {
+ mdb_sql_add_sarg(_mdb_sql(NULL), $3, $2, $1);
+ free($1);
+ free($3);
+ }
+ | identify operator identify {
+ mdb_sql_add_sarg(_mdb_sql(NULL), $3, $2, $1);
+ free($1);
+ free($3);
+ }
+ | constant operator constant {
mdb_sql_add_sarg(_mdb_sql(NULL), $3, $2, $1);
free($1);
free($3);
}
;
+identify:
+ IDENT
+ | NAME
+
operator:
'=' { $$ = MDB_EQUAL; }
| '>' { $$ = MDB_GT; }
@@ -115,12 +135,12 @@
database:
PATH
- | NAME
+ | identify
;
table:
- NAME { mdb_sql_add_table(_mdb_sql(NULL), $1); free($1); }
- | IDENT { mdb_sql_add_table(_mdb_sql(NULL), $1); free($1); }
+ identify { mdb_sql_add_table(_mdb_sql(NULL), $1); free($1); }
+ | identify identify { mdb_sql_add_table(_mdb_sql(NULL), $1); free($1); }
;
column_list:
@@ -130,8 +150,7 @@
;
column:
- NAME { mdb_sql_add_column(_mdb_sql(NULL), $1); free($1); }
- | IDENT { mdb_sql_add_column(_mdb_sql(NULL), $1); free($1); }
+ identify { mdb_sql_add_column(_mdb_sql(NULL), $1); free($1); }
;
%%