Merge branch 'master' into master

This commit is contained in:
leecher1337
2017-12-03 17:02:15 +01:00
committed by GitHub
18 changed files with 291 additions and 50 deletions

View File

@@ -45,6 +45,7 @@ null { return NUL; }
(<=) { return LTEQ; }
(>=) { return GTEQ; }
like { return LIKE; }
limit { return LIMIT; }
count { return COUNT; }
strptime { return STRPTIME; }
[ \t\r] ;
@@ -53,6 +54,7 @@ strptime { return STRPTIME; }
yyless(yyleng-1);
yymore();
}
\"[^"]*\" {
int ip, op, ilen;
ilen = strlen(yytext);

View File

@@ -422,7 +422,7 @@ mdb_sql_eval_expr(MdbSQL *sql, char *const1, int op, char *const2)
return 1;
}
if (illop) {
mdb_sql_error(sql, "Illegal operator used for comparision of literals.");
mdb_sql_error(sql, "Illegal operator used for comparison of literals.");
/* the column and table names are no good now */
mdb_sql_reset(sql);
return 1;
@@ -493,6 +493,17 @@ int mdb_sql_add_column(MdbSQL *sql, char *column_name)
sql->num_columns++;
return 0;
}
int mdb_sql_add_limit(MdbSQL *sql, char *limit)
{
sql->limit = atoi(limit);
return 0;
}
int mdb_sql_add_function1(MdbSQL *sql, char *func_name, char *arg1)
{
fprintf(stderr, "calling function %s with %s", func_name, arg1);
return 0;
}
int mdb_sql_add_table(MdbSQL *sql, char *table_name)
{
MdbSQLTable *t;
@@ -575,6 +586,8 @@ void mdb_sql_reset(MdbSQL *sql)
sql->all_columns = 0;
sql->sel_count = 0;
sql->max_rows = -1;
sql->row_count = 0;
sql->limit = 0;
}
static void print_break(int sz, int first)
{
@@ -865,7 +878,14 @@ mdb_sql_bind_all(MdbSQL *sql)
int
mdb_sql_fetch_row(MdbSQL *sql, MdbTableDef *table)
{
return mdb_fetch_row(table);
int rc = mdb_fetch_row(table);
if (rc) {
if (sql->row_count + 1 > sql->limit) {
return 0;
}
sql->row_count++;
}
return rc;
}
void

View File

@@ -42,7 +42,7 @@ static MdbSQL *g_sql;
%token <name> IDENT NAME PATH STRING NUMBER
%token SELECT FROM WHERE CONNECT DISCONNECT TO LIST TABLES AND OR NOT COUNT STRPTIME
%token SELECT FROM WHERE CONNECT DISCONNECT TO LIST TABLES AND OR NOT LIMIT COUNT STRPTIME
%token DESCRIBE TABLE
%token LTEQ GTEQ LIKE IS NUL
@@ -60,7 +60,7 @@ stmt:
;
query:
SELECT column_list FROM table where_clause {
SELECT column_list FROM table where_clause limit_clause {
mdb_sql_select(_mdb_sql(NULL));
}
| CONNECT TO database {
@@ -82,6 +82,11 @@ where_clause:
| WHERE sarg_list
;
limit_clause:
/* empty */
| LIMIT NUMBER { mdb_sql_add_limit(_mdb_sql(NULL), $2); free($2); }
;
sarg_list:
sarg
| '(' sarg_list ')'