Оболочка FMDB SQLite и пользовательские / пользовательские функции - PullRequest
2 голосов
/ 21 ноября 2010

Я сейчас использую FMDB для приложения для iPhone, и я нахожу это ... хорошо. Это действительно отличный маленький упаковщик SQLite.

FMDB GitHub: https://github.com/ccgus/fmdb

Единственная проблема - мне нужно использовать пользовательскую функцию. В SQLite я могу легко сделать это, используя следующий синтаксис:

sqlite3_create_function(database, "custom", 4, SQLITE_UTF8, NULL, &customFunc, NULL, NULL);

Кроме FMDB, я не думаю, что есть способ использовать пользовательскую функцию?

Поправь меня, если я ошибаюсь. Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

8 голосов
/ 30 октября 2013

Вы хотите, чтобы FMFatabase сделал makeFunctionNamed: MaximumArguments: withBlock: метод:

https://github.com/ccgus/fmdb#making-custom-sqlite-functions-based-on-blocks https://github.com/ccgus/fmdb/blob/master/src/fmdb.m#L1033

1 голос
/ 29 октября 2013

Я знаю, что это старый вопрос, но должно работать следующее:

FMDatabase *database = [FMDatabase databaseWithPath:dbPath];

[database open];

sqlite3_create_function([database sqliteHandle], "distance", 4, SQLITE_UTF8, NULL, &distanceFunc, NULL, NULL);

FMResultSet *results = [database executeQuery:@"SELECT * from stores WHERE distance(latitude, longitude, -37.77023, 148.089688) < 1"];

Очевидно, вы бы использовали custom и customFunc (или что-то еще) вместо distance иdistanceFunc но вы поняли.

1 голос
/ 21 ноября 2010

FMDB является открытым исходным кодом, вы можете добавить метод-обертку, чтобы завершить создание новой функции SQLite. Не должно быть сложно. Вы можете использовать другие методы-оболочки в качестве шаблонов для того, как этого добиться.

Может быть, вы могли бы внести свои дополнения обратно в сообщество?

...