Handle sql queries where an integer column is compared to a double value

(e.g. "my_int_column" = 123.0)
This commit is contained in:
Nyall Dawson 2021-08-27 10:15:07 +10:00 committed by Evan Miller
parent f557e6525b
commit f4ca6b9e57

View File

@ -78,25 +78,26 @@ int rc;
} }
int mdb_test_int(MdbSargNode *node, gint32 i) int mdb_test_int(MdbSargNode *node, gint32 i)
{ {
gint32 val = node->val_type == MDB_INT ? node->value.i : node->value.d;
switch (node->op) { switch (node->op) {
case MDB_EQUAL: case MDB_EQUAL:
//fprintf(stderr, "comparing %ld and %ld\n", i, node->value.i); //fprintf(stderr, "comparing %ld and %ld\n", i, node->value.i);
if (node->value.i == i) return 1; if (val == i) return 1;
break; break;
case MDB_GT: case MDB_GT:
if (node->value.i < i) return 1; if (val < i) return 1;
break; break;
case MDB_LT: case MDB_LT:
if (node->value.i > i) return 1; if (val > i) return 1;
break; break;
case MDB_GTEQ: case MDB_GTEQ:
if (node->value.i <= i) return 1; if (val <= i) return 1;
break; break;
case MDB_LTEQ: case MDB_LTEQ:
if (node->value.i >= i) return 1; if (val >= i) return 1;
break; break;
case MDB_NEQ: case MDB_NEQ:
if (node->value.i != i) return 1; if (val != i) return 1;
break; 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);