#define REGISTER_ST_op(argc, op) \
sqlite3_create_function(hDB, #op, argc, \
SQLITE_UTF8 | SQLITE_DETERMINISTIC, nullptr, \
OGR2SQLITE_ST_##op, nullptr, nullptr); \
sqlite3_create_function(hDB, "ST_" #op, argc, \
SQLITE_UTF8 | SQLITE_DETERMINISTIC, nullptr, \
OGR2SQLITE_ST_##op, nullptr, nullptr);
REGISTER_ST_op(1, AsText);
REGISTER_ST_op(1, AsBinary);
REGISTER_ST_op(1, GeomFromText);
REGISTER_ST_op(2, GeomFromText);
REGISTER_ST_op(1, GeomFromWKB);
REGISTER_ST_op(2, GeomFromWKB);
REGISTER_ST_op(1, IsEmpty);
REGISTER_ST_op(1, IsSimple);
REGISTER_ST_op(1, IsValid);
REGISTER_ST_op(2, Intersects);
REGISTER_ST_op(2, Equals);
REGISTER_ST_op(2, Disjoint);
REGISTER_ST_op(2, Touches);
REGISTER_ST_op(2, Crosses);
REGISTER_ST_op(2, Within);
REGISTER_ST_op(2, Contains);
REGISTER_ST_op(2, Overlaps);
REGISTER_ST_op(2, Intersection);
REGISTER_ST_op(2, Difference);
// Union() is invalid
sqlite3_create_function(hDB, "ST_Union", 2, SQLITE_ANY, nullptr,
OGR2SQLITE_ST_Union, nullptr, nullptr);
REGISTER_ST_op(2, SymDifference);
REGISTER_ST_op(1, SRID);
REGISTER_ST_op(1, Area);
REGISTER_ST_op(2, Buffer);
REGISTER_ST_op(2, MakePoint);
REGISTER_ST_op(3, MakePoint);
}
#endif // #ifdef MINIMAL_SPATIAL_FUNCTIONS
pData->SetRegExpCache(OGRSQLiteRegisterRegExpFunction(hDB));
return pData;
}