#define SQLITE_INDEX_CONSTRAINT_EQ 2 #define SQLITE_INDEX_CONSTRAINT_GT 4 #define SQLITE_INDEX_CONSTRAINT_LE 8 #define SQLITE_INDEX_CONSTRAINT_LT 16 #define SQLITE_INDEX_CONSTRAINT_GE 32 #define SQLITE_INDEX_CONSTRAINT_MATCH 64 #define SQLITE_INDEX_CONSTRAINT_LIKE 65 #define SQLITE_INDEX_CONSTRAINT_GLOB 66 #define SQLITE_INDEX_CONSTRAINT_REGEXP 67 #define SQLITE_INDEX_CONSTRAINT_NE 68 #define SQLITE_INDEX_CONSTRAINT_ISNOT 69 #define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70 #define SQLITE_INDEX_CONSTRAINT_ISNULL 71 #define SQLITE_INDEX_CONSTRAINT_IS 72 #define SQLITE_INDEX_CONSTRAINT_LIMIT 73 #define SQLITE_INDEX_CONSTRAINT_OFFSET 74 #define SQLITE_INDEX_CONSTRAINT_FUNCTION 150
Эти макросы определяют позволенные значения для поля sqlite3_index_info.aConstraint[].op. Каждое значение представляет оператор, который является частью ограничительного срока в операторе WHERE запроса, который использует виртуальную таблицу.
Левый операнд оператора дан соответствующему полю aConstraint[].iColumn. iColumn = -1 указывает, что левый операнд это rowid. У SQLITE_INDEX_CONSTRAINT_LIMIT и SQLITE_INDEX_CONSTRAINT_OFFSET нет левого операнда, таким образом для тех операторов соответствующее поле aConstraint[].iColumn бессмысленно и не должно использоваться.
Все значения оператора от SQLITE_INDEX_CONSTRAINT_FUNCTION до значения 255 резервируются, чтобы представлять функции, которые перегружены методом xFindFunction виртуального внедрения таблицы.
Правые операнды для каждого ограничения могли бы быть доступны через sqlite3_vtab_rhs_value(). Обычно правый операнд доступен только, если это появляется как единственный постоянный литерал во входе SQL. Если правый операнд будет другой колонкой или выражением (даже константным выражением) или параметром, то sqlite3_vtab_rhs_value(), вероятно, не будет в состоянии извлечь его. У операторов SQLITE_INDEX_CONSTRAINT_ISNULL и SQLITE_INDEX_CONSTRAINT_ISNOTNULL нет правого операнда, следовательно sqlite3_vtab_rhs_value() для тех операторов будет всегда возвращать SQLITE_NOTFOUND.
Последовательность сопоставления, которая будет использоваться для сравнения, может быть найдена, используя sqlite3_vtab_collation(). Для большинства реальных виртуальных таблиц не имеет значения последовательность сопоставления ограничений (например, потому что ограничения числовые), так что sqlite3_vtab_collation() обычно не нужен.