Переключение на Главную Страницу Страницы: 1 ... 61 62 [63] 64 65 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 464512 )
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #930 - 08. Марта 2018 :: 14:02
Печать  
alyuev писал(а) 07. Марта 2018 :: 15:04:
Спасибо! Пошел разбираться...

Лучше не надо. Я ошибся, в sqlite-odbc не старая версия, а совершенно другая Подмигивание
В составе sqlite модуль csv совсем-совсем убогий...
  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #931 - 08. Марта 2018 :: 14:49
Печать  
И у меня не хочет загружаться скомпилированный тобой модуль.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #932 - 08. Марта 2018 :: 14:51
Печать  
В mod_csvtable не удалось загрузить кириллицу.  Сама загрузка очень быстрая - 900К строк загрузилось в лайт за 0.002с.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #933 - 08. Марта 2018 :: 14:54
Печать  
mod_csv прельщает тем, что там есть возможность указать schema. В mod_csvtable загрузку можно варьировать параметрами функции.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #934 - 08. Марта 2018 :: 15:28
Печать  
Забавный случай выявился в работе 1sqlite. Загружаю CSV, там есть колонка с названием "RATES (US$)". Именно так - с пробелом, скобками и знаком доллара. mod_csvtable с параметром argv[3]=4 корректно загружает файл, заменяя название на "RATES_(US$)". Но дальше работать так нельзя, т.к. выгрузить в ТЗ выполняя запрос

SELECT * FROM tableName

не дает символ $. Возникает ошибка: "Неправильная типизация в колонке: RATES_(US$)"

Убираю $ - в ТЗ выгружается. Но, например, работать с запросом мешают скобки.

При выполнении:

SELECT RATES_(US) FROM tableName

возникает ошибка: "no such column: US"

В обоих случаях, как я понимаю, затык в самой компоненте 1sqlite.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #935 - 08. Марта 2018 :: 15:32
Печать  
Если бы в mod_csvtable был метод замены символов в названии колонок - это было бы супер.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #936 - 08. Марта 2018 :: 15:36
Печать  
alyuev писал(а) 08. Марта 2018 :: 14:49:
И у меня не хочет загружаться скомпилированный тобой модуль.

А он по другому должен грузится. https://sqlite.org/c3ref/load_extension.html
Там точка входа не sqlite3_extension_init (по умолчанию), а sqlite3_csv_init и ее надо указывать явно.
  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #937 - 08. Марта 2018 :: 15:47
Печать  
Т.е.? Разъясни, плиз.
mod_csv в текущей реализации компоненты нельзя будет загрузить?
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #938 - 08. Марта 2018 :: 15:47
Печать  
alyuev писал(а) 08. Марта 2018 :: 15:28:
Забавный случай выявился в работе 1sqlite.

Спец-символы используют только умные люди...
Вот в Контуре работают умные! Поле с названием "ID" задействовали в 1С и тоже не работает.
В оригинальной версии "по умолчанию" названия столбцов вообще не загружаются.
  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #939 - 08. Марта 2018 :: 15:48
Печать  
alyuev писал(а) 08. Марта 2018 :: 15:47:
Т.е.? Разъясни, плиз.
mod_csv в текущей реализации компоненты нельзя будет загрузить?

Можно, но в текущей реализации он бесполезен. Это только шаблон.

P.S. sqlite - встраиваемая в приложение база т.е. по-умолчанию почти все sql`ное работает, а если нужен юникод везде и т.п. - извольте сами пилите. Но за счет этого ничтожный размер.
  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #940 - 08. Марта 2018 :: 15:53
Печать  
По поводу кириллицы - я попробовал загрузить MLG. Это же по сути CSV. Он загрузился, быстро. Там есть, конечно, и другие ньюансы, но первый - это, конечно, русские буквы.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #941 - 08. Марта 2018 :: 16:00
Печать  
Увы, увы... русские буквы не в приоритете.
Ну раз слегка занялся то sqlite3_mod_compress_3.22.0 все таки сделал (там же).
А то эти xml`ки егаис всю базу загадили  Злой
Внешняя база похудела в 3 раза, скорость распаковки вполне приемлема.
  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #942 - 12. Марта 2018 :: 15:10
Печать  
Кириллицу не читает, если файл в кодировке ANSI. В частности такой формат у MLG.

Если сохранить в UTF-8 без BOM - кириллица читается.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #943 - 16. Марта 2018 :: 20:43
Печать  
"Тепленькая пошла" - 3.22.0.18
"Тепленькая пошла" - 3.22.0.19
https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

+ поддержка объекта BinaryDatа в 1С++ и типа BLOB sqlite3
     тип поля BLOB из базы sqlite3 автоматически преобразуется в объект 1С++ BinaryDatа
     объект 1С++ BinaryDatа может быть записан в базу sqlite3 методом Запрос.УстановитьПараметр("@blob",bindata);
+ улучшено сообщение при ошибке в методе УстановитьПараметр
     вместо  "Ошибка установки sql-параметра @val - Неизвестный тип значения"
     будет выводится  "Ошибка установки sql-параметра @val - Неизвестный тип значения: ИндексированнаяТаблица"
3.22.0.19
- исправлена глупая ошибка определения длины блоба

+ sqlite3_mod_compress_3.22.0.zip (функции compress(t) и uncompress(t))

sqlite3_mod_zipfle почти побежден, но еще сопротивляется - этот модуль коррелирует с изменениями выше.
Побежден.
В процессе был найден забавный баг, который в sqlite исправили очень оперативно. http://www.sqlite.org/src/info/cf78a88279942461

The SQLite Zipfile Module
https://sqlite.org/zipfile.html

Виртуальная таблица Zipfile
Подключение и работа с архивами zip. Упаковка/Распаковка только deflate, нет поддержки огромных файлов и томов... и т.д и т.п. см ссылку выше.
В режиме виртуальной таблицы поддерживаются стандартные запросы SELECT,INSERT,DELETE,UPDATE

Поля таблицы:
name            - имя файла
mode            - битмаска (S_IFDIR 0040000,S_IFREG 0100000,S_IFLNK 0120000) ни на что особо не влияет...
mtime            - таймштамп, перевод в читаемую дату: datetime(mtime, 'unixepoch')
sz            - размер объекта
rawdata            - сырые данные
data            - распакованные данные
method            - метод сжатия, 0-нет сжатия, 8-данные упакованы deflate

Загрузка расширения в sqlite
SELECT load_extension("sqlite3_mod_zipfile","sqlite3_zipfile_init");

Запрос из файла zip в режиме "только чтение", без создания виртуальной таблицы.
SELECT * from zipfile('e:\b\sqlite_extensions\sqlite3_mod_zipfile\zipfile.zip');

Создание виртуальной таблицы

CREATE VIRTUAL TABLE temp.zip USING zipfile('e:\b\sqlite_extensions\sqlite3_mod_zipfile\zipfile.zip');

Запрос из виртуальной таблицы

SELECT * from temp.zip;

Создание каталога

INSERT INTO temp.zip (name,data) VALUES ('dirname',NULL);

Создание каталога и файла
INSERT INTO temp.zip (name,data) VALUES ('/dir2/file2.txt','data');

Примечания:
- если имена файлов в кодировке DOS, они перекодируются как CP_OEMCP->CP_UTF8
  оригинальный модуль перекодировку не делает
- при DELETE и UPDATE учитывается кодировка DOS
  оригинальный модуль это не учитывает
- при INSERT и UPDATE имена файлов записываются в UTF-8
  оригинальное поведение не изменено, архиваторы уже давно UTF-8 понимают
  но если имя файла было в кодировке DOS, оно будет изменено на UTF-8
- 7zip версии 9.20 открывает архив нормально,
  версии 7zip выше 9.20 ничего не видят, но если
  открыть файл через меню как "Открыть архив/#:e" то данные видно.
  у TCMD, WinRar, менеджера работы с архивами Windows такой проблемы нет
  метод UnZip у BinaryData тоже работает с таким архивом
- собрано gcc, зависимостей от 1с 7.7 или 1sqlite нет т.е. можно подгружать и в консольную версию и т.п.
« Последняя редакция: 17. Марта 2018 :: 16:28 - Djelf »  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #944 - 22. Марта 2018 :: 17:32
Печать  
alyuev писал(а) 12. Марта 2018 :: 15:10:
Кириллицу не читает, если файл в кодировке ANSI. В частности такой формат у MLG.
Если сохранить в UTF-8 без BOM - кириллица читается.


Ладно, ладно... переписал куски модуля из sqliteodbc, он мне не нравится, но он все равно лучше чем оригинальный...

sqlite3_mod_csv альфа1

Изменения:
   - изменен 3й параметр на "кодировка файла"
   - изменено название колонок на попроще
   - понимает BOM
   - всяко разное для того чтобы это все заработало...

https://cloud.mail.ru/public/AxVj/tNM1g3MdU
https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

Подключение расширения:
Код (C++)
Выбрать все
   SELECT load_extension("sqlite3_mod_csv","sqlite3_extension_init"); 



Подключение файла csv:
Код (C++)
Выбрать все
    CREATE VIRTUAL TABLE temp.csv USING деленияКолонок[*]); 



Параметры подключения:
    (1)ИмяФайла:
        в формате windows
    (2)ЕстьЗаголовок:
        0 - нет заголовка, имена будут c1,c2,c3
        1 - есть заголовок, русские буквы будут как '?'
    (3)Кодировка:
        1 - CP_ACP
        2 - CP_OEMCP
        3 - CP_UTF8
        прочие значения - CP_UTF8
    (4)Разделители:
        список разделителей полей, вроде работает...
    (5)ОграничителиСтроки:
        судя по всему обрезает строку до второго появления ограничителя
    (6)ОпределенияКолонок:
        по очереди Имя, тип, но сломалось... не очень то и нужно

P.S.
    1. скорость не плоха... у меня получилось около 130к строк в секунду
    2. select * from temp.csv не надо использовать без limit и offset - иначе будет переполнение памяти.
    3. форум съел часть строки подключения, ориентируйтесь на (НомерПараметра)
    4. Пропуск параметра нужно писать как 0 или '', иначе он не засчитывается как параметр и нумерация сбивается.

« Последняя редакция: 22. Марта 2018 :: 19:29 - Djelf »  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 61 62 [63] 64 65 ... 79
ОтправитьПечать