Add support for <> SQL operator (#329)

This commit is contained in:
Nyall Dawson 2021-08-22 14:28:29 +10:00 committed by GitHub
parent 6a15f6b1e6
commit fadd536e2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 17 additions and 2 deletions

View File

@ -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 || \

View File

@ -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;

View File

@ -68,6 +68,7 @@ null { return NUL; }
"=" { return EQ; }
(<=) { return LTEQ; }
(>=) { return GTEQ; }
(<>) { return NEQ; }
"<" { return LT; }
">" { return GT; }
like { return LIKE; }

View File

@ -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 {

View File

@ -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; }
;