finish type checking

This commit is contained in:
Alex Garcia 2024-11-13 22:26:06 -08:00
parent 9fffdc4d1b
commit f12be5292b
3 changed files with 33 additions and 17 deletions

View file

@ -7334,11 +7334,19 @@ int vec0_insert_metadata_values(vec0_vtab *p, int argc, sqlite3_value ** argv, i
break; break;
} }
case VEC0_METADATA_COLUMN_KIND_FLOAT: { case VEC0_METADATA_COLUMN_KIND_FLOAT: {
// TODO verify v is SQLITE_FLOAT if(sqlite3_value_type(v) != SQLITE_FLOAT) {
rc = SQLITE_ERROR;
vtab_set_error(&p->base, "Expected float for FLOAT metadata column %.*s, received %s", p->metadata_columns[metadata_idx].name_length, p->metadata_columns[metadata_idx].name, type_name(sqlite3_value_type(v)));
goto done;
}
break; break;
} }
case VEC0_METADATA_COLUMN_KIND_TEXT: { case VEC0_METADATA_COLUMN_KIND_TEXT: {
// TODO verify v is SQLITE_TEXT if(sqlite3_value_type(v) != SQLITE_TEXT) {
rc = SQLITE_ERROR;
vtab_set_error(&p->base, "Expected text for TEXT metadata column %.*s, received %s", p->metadata_columns[metadata_idx].name_length, p->metadata_columns[metadata_idx].name, type_name(sqlite3_value_type(v)));
goto done;
}
break; break;
} }
} }

View file

@ -1154,24 +1154,28 @@
'message': 'Expected 0 or 1 for BOOLEAN metadata column b', 'message': 'Expected 0 or 1 for BOOLEAN metadata column b',
}) })
# --- # ---
# name: test_types[illegal-float] # name: test_types[illegal-type-boolean]
OrderedDict({ dict({
'sql': 'insert into v(vector, b, n, f, t) values (?, ?, ?, ?, ?)', 'error': 'OperationalError',
'rows': list([ 'message': 'Expected 0 or 1 for BOOLEAN metadata column b',
]),
}) })
# --- # ---
# name: test_types[illegal-int] # name: test_types[illegal-type-float]
dict({
'error': 'OperationalError',
'message': 'Expected float for FLOAT metadata column f, received TEXT',
})
# ---
# name: test_types[illegal-type-int]
dict({ dict({
'error': 'OperationalError', 'error': 'OperationalError',
'message': 'Expected integer for INTEGER metadata column n, received TEXT', 'message': 'Expected integer for INTEGER metadata column n, received TEXT',
}) })
# --- # ---
# name: test_types[illegal-text] # name: test_types[illegal-type-text]
OrderedDict({ dict({
'sql': 'insert into v(vector, b, n, f, t) values (?, ?, ?, ?, ?)', 'error': 'OperationalError',
'rows': list([ 'message': 'Expected text for TEXT metadata column t, received INTEGER',
]),
}) })
# --- # ---
# name: test_types[legal] # name: test_types[legal]

View file

@ -55,12 +55,16 @@ def test_types(db, snapshot):
) )
# fmt: off # fmt: off
assert exec(db, INSERT, [b"\x11\x11\x11\x11", 'illegal', 1, 1.1, 'test']) == snapshot(name="illegal-boolean") assert exec(db, INSERT, [b"\x11\x11\x11\x11", 'illegal', 1, 1.1, 'test']) == snapshot(name="illegal-type-boolean")
assert exec(db, INSERT, [b"\x11\x11\x11\x11", 1, 'illegal', 1.1, 'test']) == snapshot(name="illegal-int") assert exec(db, INSERT, [b"\x11\x11\x11\x11", 1, 'illegal', 1.1, 'test']) == snapshot(name="illegal-type-int")
assert exec(db, INSERT, [b"\x11\x11\x11\x11", 1, 1, 'illegal', 'test']) == snapshot(name="illegal-float") assert exec(db, INSERT, [b"\x11\x11\x11\x11", 1, 1, 'illegal', 'test']) == snapshot(name="illegal-type-float")
assert exec(db, INSERT, [b"\x11\x11\x11\x11", 1, 1, 1.1, 420]) == snapshot(name="illegal-text") assert exec(db, INSERT, [b"\x11\x11\x11\x11", 1, 1, 1.1, 420]) == snapshot(name="illegal-type-text")
# fmt: on # fmt: on
assert exec(db, INSERT, [b"\x11\x11\x11\x11", 44, 1, 1.1, "test"]) == snapshot(
name="illegal-boolean"
)
def test_updates(db, snapshot): def test_updates(db, snapshot):
pass pass