Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / конвертировать таблицу с FTS из MSSQL в SQLITE / 6 сообщений из 6, страница 1 из 1
15.12.2016, 11:23
    #39367462
AVRob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертировать таблицу с FTS из MSSQL в SQLITE
В MSSQL имеется татлица table1 c полями

docum_id:integer autoincrement
publishDate:datetime;
kod:int;
mytext:Nvarchar(max);

По полю mytext установлен FTS.

Необходимо копировать таблицу в sqlite.
При создании fts таблицы в sqlte с помощью

CREATE VIRTUAL TABLE table1 USING fts4(mytext);

однако, выяснилось что в fts таблице нельзя создавать поля типа datetime или int.

Как в sqlite создать соответствующую table1 таблицу с fts
и как
в sqlite написать запрос

select publishDate,mytext from table1 where Contains(mytext,'searchstr') and (publishDate>d1)and (publishDate<d2)
...
Рейтинг: 0 / 0
15.12.2016, 14:03
    #39367707
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертировать таблицу с FTS из MSSQL в SQLITE
AVRob,

В документации SQLite FTS3 and FTS4 Extensions нет сведений, что есть функция Contains в движке. Но такое гуглится, что есть в Oracle. В SQLite есть оператор MATCH и ограничений на создание таблицы с типами datetime нет.

p.s. на самом деле внутренний тип хранения не DATETTIME, а TEXT, но приложении администрирования, может визуально показывать, что это "дата" и работать как с датой (может корректно работать сортировка, отображать в национальном формате дату и т.д.), в любом случае проблем при добавлении таких столбцов не выявил
Код: sql
1.
2.
3.
CREATE VIRTUAL TABLE table1 USING fts4(mytext text, n integer, d1 datetime, d2 datetime);

select * from table1 where table1.mytext match '456' and d1 >= strftime('%Y-%m-%d %H:%M:%S','2016-01-01 12:00:00')
...
Рейтинг: 0 / 0
15.12.2016, 19:03
    #39368086
AVRob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертировать таблицу с FTS из MSSQL в SQLITE
VSVLAD, Спасибо.

Теперь другая проблема с Encoding.

Кода создается обычная таблица

CREATE TABLE table0 (mytext Ntext,publishdate date);
INSERT INTO (mytext,publishdate) VALUES ('привет','1998-12-07')

все нормально со значением mytext='привет'

а при создании fts таблицы
CREATE VIRTUAL TABLE table0 USING FTS4(mytext,publishdate);
INSERT INTO (mytext,publishdate) VALUES ('привет','1998-12-07')

при чтении вместо 'привет' имеем '??????'.
Читаю с базы с помощью AnyDac(FireDac) в Delphi xe3 с ADQUERY.

NTEXT, NVARCHAR рядом с mytext при создании таблицы не помогают.
...
Рейтинг: 0 / 0
15.12.2016, 19:28
    #39368106
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертировать таблицу с FTS из MSSQL в SQLITE
AVRob,

Проверьте с помощью какого-нибудь средства администрирования, правильно ли в базу записываете значения, чтобы убедиться, что правильно ли выполняется чтение. Или проблема с настройкой AnyDac или с приложением. AnyDac не установлен, конкретнее подсказать не смогу
...
Рейтинг: 0 / 0
15.12.2016, 20:07
    #39368126
AVRob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертировать таблицу с FTS из MSSQL в SQLITE
VSVLAD, в базе все записано верно - открыл базу с SQLITEEXPERT.
Проблема в FireDAC c SQLITE.

В первом случае FireDAC читает данные с базы как Ntext, как яно указано при создании таблицы.
Во втором случае при создании таблицы не указывается тип столбца (а при указании тип игнорируется).
В этом случае FireDAC читает данные с базы как ANSISTRING.
...
Рейтинг: 0 / 0
15.12.2016, 23:16
    #39368210
AVRob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертировать таблицу с FTS из MSSQL в SQLITE
Скорее это баг FireDac

В файле uADPhysSQLite.pas

в процедуре ADSQLiteTypeName2ADDataType

для случая ABaseTypeName = 'VARCHAR'

строки

SetLen(AOptions.FormatOptions.MaxStringSize, False);
AType := dtAnsiString;

заменил на
SetLen(AOptions.FormatOptions.MaxStringSize, True);
AType := dtWideString;

ADQUERY и ADTABLE только в runtime возвращают 'привет'.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / конвертировать таблицу с FTS из MSSQL в SQLITE / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]