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