mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-08-20 06:51:13 +08:00
Add support for <> SQL operator (#329)
This commit is contained in:
parent
6a15f6b1e6
commit
fadd536e2e
@ -129,6 +129,7 @@ enum {
|
||||
MDB_ISNULL,
|
||||
MDB_NOTNULL,
|
||||
MDB_ILIKE,
|
||||
MDB_NEQ,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
@ -162,6 +163,7 @@ enum {
|
||||
x == MDB_LT || \
|
||||
x == MDB_GTEQ || \
|
||||
x == MDB_LTEQ || \
|
||||
x == MDB_NEQ || \
|
||||
x == MDB_LIKE || \
|
||||
x == MDB_ILIKE || \
|
||||
x == MDB_ISNULL || \
|
||||
|
@ -67,6 +67,9 @@ int rc;
|
||||
case MDB_LTEQ:
|
||||
if (rc>=0) return 1;
|
||||
break;
|
||||
case MDB_NEQ:
|
||||
if (rc!=0) return 1;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Calling mdb_test_sarg on unknown operator. Add code to mdb_test_string() for operator %d\n",node->op);
|
||||
break;
|
||||
@ -92,6 +95,9 @@ int mdb_test_int(MdbSargNode *node, gint32 i)
|
||||
case MDB_LTEQ:
|
||||
if (node->value.i >= i) return 1;
|
||||
break;
|
||||
case MDB_NEQ:
|
||||
if (node->value.i != i) return 1;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Calling mdb_test_sarg on unknown operator. Add code to mdb_test_int() for operator %d\n",node->op);
|
||||
break;
|
||||
@ -129,6 +135,9 @@ int mdb_test_double(int op, double vd, double d)
|
||||
case MDB_LTEQ:
|
||||
ret = (vd >= d);
|
||||
break;
|
||||
case MDB_NEQ:
|
||||
ret = (vd != d);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Calling mdb_test_sarg on unknown operator. Add code to mdb_test_double() for operator %d\n",op);
|
||||
break;
|
||||
|
@ -68,6 +68,7 @@ null { return NUL; }
|
||||
"=" { return EQ; }
|
||||
(<=) { return LTEQ; }
|
||||
(>=) { return GTEQ; }
|
||||
(<>) { return NEQ; }
|
||||
"<" { return LT; }
|
||||
">" { return GT; }
|
||||
like { return LIKE; }
|
||||
|
@ -399,6 +399,7 @@ mdb_sql_eval_expr(MdbSQL *sql, char *const1, int op, char *const2)
|
||||
case MDB_LTEQ: compar = (value <= 0); break;
|
||||
case MDB_LIKE: compar = mdb_like_cmp(const1,const2); break;
|
||||
case MDB_ILIKE: compar = mdb_ilike_cmp(const1,const2); break;
|
||||
case MDB_NEQ: compar = (value ? 1 : 0); break;
|
||||
default: illop = 1;
|
||||
}
|
||||
} else if (const1[0]!='\'' && const2[0]!='\'') {
|
||||
@ -410,6 +411,7 @@ mdb_sql_eval_expr(MdbSQL *sql, char *const1, int op, char *const2)
|
||||
case MDB_GTEQ: compar = (val1 >= val2); break;
|
||||
case MDB_LT: compar = (val1 < val2); break;
|
||||
case MDB_LTEQ: compar = (val1 <= val2); break;
|
||||
case MDB_NEQ: compar = (val1 != val2); break;
|
||||
default: illop = 1;
|
||||
}
|
||||
} else {
|
||||
|
@ -63,7 +63,7 @@ typedef struct sql_context
|
||||
%token <name> IDENT NAME PATH STRING NUMBER OPENING CLOSING
|
||||
%token SELECT FROM WHERE CONNECT DISCONNECT TO LIST TABLES AND OR NOT LIMIT COUNT STRPTIME
|
||||
%token DESCRIBE TABLE TOP PERCENT
|
||||
%token LTEQ GTEQ LIKE ILIKE IS NUL
|
||||
%token LTEQ GTEQ NEQ LIKE ILIKE IS NUL
|
||||
|
||||
%type <name> database
|
||||
%type <name> constant
|
||||
@ -81,7 +81,7 @@ typedef struct sql_context
|
||||
%left OR
|
||||
%left AND
|
||||
%right NOT
|
||||
%left EQ LTEQ GTEQ LT GT LIKE ILIKE IS
|
||||
%left EQ LTEQ GTEQ NEQ LT GT LIKE ILIKE IS
|
||||
|
||||
%%
|
||||
|
||||
@ -192,6 +192,7 @@ operator:
|
||||
| LT { $$ = MDB_LT; }
|
||||
| LTEQ { $$ = MDB_LTEQ; }
|
||||
| GTEQ { $$ = MDB_GTEQ; }
|
||||
| NEQ { $$ = MDB_NEQ; }
|
||||
| LIKE { $$ = MDB_LIKE; }
|
||||
| ILIKE { $$ = MDB_ILIKE; }
|
||||
;
|
||||
|
Loading…
Reference in New Issue
Block a user