Переключение на Главную Страницу Страницы: [1] 2 3 ... 20 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 58431 )
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
1sqlite
20. Октября 2007 :: 04:52
Печать  
Тема просто выливается из http://www.1cpp.ru/forum/YaBB.pl?num=1192437970, так как это уже не идея, а нечто воплощающееся.
Итак, что же из этого в итоге должно получится.
ВК, которая позволяет из 1С удобно работать с базами SQLite.
Также в dbf версии 1С она будет позволять в базах SQLite обращатся к таблицам 1С через "родные" методы движка 1С (dbeng32.dll), то бишь аналог работы с SQL базами 1С в "родном" соединении. Соответственно, это позволит выполнять запросы к дбф базе и в монопольном режиме.

В этом топике я буду выкладывать новые версии 1sqlite.dll по мере их возникновения.



Версия 1.0.0.4

Может:
- выполнять запросы к базам SQLite в дбф и скл базах 1С.
- отображать справочники 1С в базу SQLite в дбф базах 1С.
- параметризировать запросы SQLite значениями типа строка, число.
- Пытается использовать индексы при работе с таблицами 1С.
  Вот это надо особо протестить.

Не может:
- Типизировать результат выполнения запроса в агрегатные типы 1С.
- Устанавливать текстовые (подставляемые) параметры.

Исправлена ошибка сравнения полей.
Например, при сравнение where descr < 'Б'
попадало все до 'В'

Приложена ертшка, типа для тестирования запросов к базе из SQLite.
Кнопка "Подключаемые справочники" позволяет выбрать, какие справочники
отображать в базу SQLite. Имена таблиц справочников в базе SQLite
равны идентификатору справочника.
Флажок "План выполнения" заставляет SQLite не выполнять запрос, а вернуть
код программы движка VDBE для выполнения запроса.
Подробнее см. на http://www.sqlite.org/vdbe.html


Исправлено 26.10.2007

Версия 1.0.0.5
Пофиксены баги, найденные kms'ом и другими.
Ускорена работа с индексами.
Просьба затестить.
Особенно условия в where, join.
Как реагирует на order by.


29.10.2007

Версия 1.0.0.6
Очередное исправление работы с индексами.
Пофиксены косяки с формированием ключей (не ручаюсь, что все).
Устранен косяк при использовании одной таблицы несколько раз в запросе (join сам с собой).
Убран БОЛЬШОЙ косяк при left join.
Доработки в тестовой обработке.


29.10.2007

Версия 1.0.0.7
Очередное исправление работы с индексами.
В одном месте строки сравнивались регистрозависимо, что могло приводить к неверным результатам.
Добавлено подключение Журнала, документов, регистров (см. код обработки)
Доработки в тестовой обработке.


31.10.2007

Версия 1.0.0.8
Движок SQLite пропатчен на предмет регистронезависимости. Регистронезависимость теперь работает для всех символов, не только для латинских.
Соответственно, LIKE теперь нормально ищет в русских строках.
lower, upper также работают правильно.
Пофиксены мелкие досадные баги.
Строки отдаются движку SQLite и получаются от него через utf8, вместо utf16, что несколько быстрее.
Доработки в тестовой обработке.


01.11.2007

Версия 1.0.0.9
Устранен БАГ при подборе индекса сорировки.
Мелкие улучшения.
Доработки в тестовой обработке.

« Последняя редакция: 01. Ноября 2007 :: 14:11 - orefkov »  

1_001.ZIP ( 184 KB | Загрузки )
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #1 - 20. Октября 2007 :: 05:00
Печать  
Хочу пояснить по использованию индексов 1С.
Движок SQLite ничего не знает ни про какие 1С, он знает только адреса функций моего модуля, который я регистрирую в нем.
Когда SQLite компилирует запрос, он вызывает мою функцию xBestIndex, передавая мне информацию, по каким полям какие условия присутствуют.
Тут уж я должен исходя из переданной информации САМ решить, какой индекс использовать. И когда SQLite вызовет мою функцию xFilter и далее xNext, работать с выбранным индексом.
То есть мне предстоит решить задачу о подборе оптимального индекса.
Чем я сейчас и займусь.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #2 - 20. Октября 2007 :: 07:32
Печать  
Саш, а зачем в курилке-то?
Теме прямая дорога в раздел Прямые запросы.
ИМХО и нужно дать ей статус прикрепленной ветки, тема очень полезная.

Федор, перенеси, плиз, ветку!
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #3 - 20. Октября 2007 :: 07:44
Печать  
В ДБФ версии у 1С крайне редко встречаются "чистые" индексы по полям (исключение - Id
в справочниках и Iddoc d 1SJourn) В основном идет строковое сложение
типа
Код
Выбрать все
DTOS(date)+time+iddoc 

(http://www.1cpp.ru/forum/YaBB.pl?num=1184317705)


Такие индексы возможно будет использовать?
Особенно интересуют соединения JOIN - в Fox е не удалось сделать это эффективно
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #4 - 20. Октября 2007 :: 09:00
Печать  
kiruha писал(а) 20. Октября 2007 :: 07:44:
В ДБФ версии у 1С крайне редко встречаются "чистые" индексы по полям (исключение - Id
в справочниках и Iddoc d 1SJourn) В основном идет строковое сложение
типа
Код
Выбрать все
DTOS(date)+time+iddoc 

(http://www.1cpp.ru/forum/YaBB.pl?num=1184317705)


Такие индексы возможно будет использовать?
Особенно интересуют соединения JOIN - в Fox е не удалось сделать это эффективно

Да, я планирую сделать "виртуальные" поля в таблицах, представляющие индексы.
То есть каждый составной индекс в таблице будет дополнительным полем в таблице SQLite, представляющей таблицу 1С.
примерно как бы так представляю себе:

select ... from Журнал where Журнал.DATE_TIME_IDDOC >= make_key(:Дата, :Время)

То бишь для операций сравнения с этим виртуальным полем используется составной ключ.
Это позволит более гибко управлять использованием индексов в запросе, а также в дальнейшем создать эффективного поставщика данных табличного поля.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #5 - 20. Октября 2007 :: 09:23
Печать  
orefkov

1. Будет ли реализована в том же ключе работа с какими-либо другими виртуальными таблицами?
Прежде всего интересует самый простой случай - с обычными тз.
Есть ли такие планы?


2. И что-то я не понял, виртуальные таблицы позволяют по ним строить родные индексы SQLITE, или нет?
Типа вот так (практический смысл для 1С-таблиц не рассматриваем):
Код
Выбрать все
	запрос.ВыполнитьЗапрос("create virtual table Nom using dbeng(Справочник.Номенклатура)");
	запрос.ВыполнитьЗапрос("create index i_nom on Nom(descr)");
	тз = запрос.ВыполнитьЗапрос("select * from Nom order by descr");
 


В документации не вижу препятствий, однако же индекс не строится.

Вопрос 2 снимается
http://www.sqlite.org/cvstrac/wiki?p=VirtualTables

3. Обработка ошибок будет?

4. Какая планируется лицензия?

P.S.
Подозреваю, что некоторые вопросы слишком личные.
Если так, то прошу, как и прежде, считать, что я их не задавал. Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #6 - 21. Октября 2007 :: 06:36
Печать  
kms писал(а) 20. Октября 2007 :: 09:23:
orefkov

1. Будет ли реализована в том же ключе работа с какими-либо другими виртуальными таблицами?
Прежде всего интересует самый простой случай - с обычными тз.
Есть ли такие планы?

В силу того, что по виртуальныи таблицам сам SQLite не может строить индексы, полагаю, что отображать в него ТЗ особого смысла не имеет. Гораздо прикольнее будет реализовать выгрузку ТЗ в таблицу SQLite на С++, вызовом одного метода из 1С. А потом SQLite что хочешь с ней будет делать.

kms писал(а) 20. Октября 2007 :: 09:23:
3. Обработка ошибок будет?

А куда ж без нее?

kms писал(а) 20. Октября 2007 :: 09:23:
4. Какая планируется лицензия?

GPL естественно. Так как с CVS я в последнее время не работаю, а только с SVN, то наверное, проект захостю на гугле.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #7 - 21. Октября 2007 :: 15:21
Печать  
orefkov писал(а) 21. Октября 2007 :: 06:36:
kms писал(а) 20. Октября 2007 :: 09:23:
4. Какая планируется лицензия?

GPL естественно. Так как с CVS я в последнее время не работаю, а только с SVN, то наверное, проект захостю на гугле.

А вот это здорово! Улыбка Значит, твой опыт по ковырянию dbeng32 будет доступен другим людям. Улыбка Соответственно, кто-нибудь со временем сможет спортировать 1С на что-нибудь типа Оракла (интересно было бы проверить, так ли он будет крут в случае 1С  Очень довольный)

PS. На sf.net тоже SVN есть. (А уж сервисов там... вообще до хрена.)
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #8 - 21. Октября 2007 :: 19:19
Печать  
orefkov писал(а) 21. Октября 2007 :: 06:36:
kms писал(а) 20. Октября 2007 :: 09:23:
4. Какая планируется лицензия?

GPL естественно. Так как с CVS я в последнее время не работаю, а только с SVN, то наверное, проект захостю на гугле.

Действительно, здорово. Улыбка
Вопросов больше нет. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #9 - 22. Октября 2007 :: 08:52
Печать  
orefkov писал(а) 21. Октября 2007 :: 06:36:
Гораздо прикольнее будет реализовать выгрузку ТЗ в таблицу SQLite на С++, вызовом одного метода из 1С. А потом SQLite что хочешь с ней будет делать.

Будет ли сделана выгрузка Запроса 1с в в таблицу SQLite на С++  (как для 1с dbf так и 1с sql)?
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #10 - 23. Октября 2007 :: 04:51
Печать  
Z1 писал(а) 22. Октября 2007 :: 08:52:
orefkov писал(а) 21. Октября 2007 :: 06:36:
Гораздо прикольнее будет реализовать выгрузку ТЗ в таблицу SQLite на С++, вызовом одного метода из 1С. А потом SQLite что хочешь с ней будет делать.

Будет ли сделана выгрузка Запроса 1с в в таблицу SQLite на С++  (как для 1с dbf так и 1с sql)?

Скорее всего да. Только зачем?
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: 1sqlite
Ответ #11 - 23. Октября 2007 :: 06:02
Печать  
А как на счет описания?
Я в архиве нашел только dll и ert.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #12 - 23. Октября 2007 :: 07:06
Печать  
orefkov писал(а) 23. Октября 2007 :: 04:51:
Z1 писал(а) 22. Октября 2007 :: 08:52:
orefkov писал(а) 21. Октября 2007 :: 06:36:
Гораздо прикольнее будет реализовать выгрузку ТЗ в таблицу SQLite на С++, вызовом одного метода из 1С. А потом SQLite что хочешь с ней будет делать.

Будет ли сделана выгрузка Запроса 1с в в таблицу SQLite на С++  (как для 1с dbf так и 1с sql)?

Скорее всего да. Только зачем?

Чтобы можно было Работающий запрос 1с выгрузить в sqlite таблицу ( не виртуальная
бд в памяти )
Далее работать с sqlite таблицей аналогично как с ТаблицейЗначений.
Сортировка ,свертка , выборка должны работать быстрее чем с ТЗ.
Может это и промежуточная цель и она будет не нужна, если полностью получиться subj, но как то без индексов на вирт. таблице тоскливо по тестам по одному большому справочнику (64 000 строк) (выборка одной строки гораздо медлеyней ole db).
  
Наверх
 
IP записан
 
xilian
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 23. Октября 2007
Re: 1sqlite
Ответ #13 - 23. Октября 2007 :: 13:25
Печать  
Гм, где-то такая шутка валялась. Но в редакции для КПК. Использовалась для загрузки справочников/остатков в терминалах.  Но 1с-вские данные она не понимает .
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #14 - 23. Октября 2007 :: 18:01
Печать  
Вот подумалось...
Если посмотреть с точки зрения пользователя, то было бы очень хорошо, если бы не пришлось переделывать существующие запросы для OLE DB. А то ведь как получается? Для OLE DB:
Код
Выбрать все
SELECT * FROM $Справочник.Номенклатура 


Для 1sqlite:
Код
Выбрать все
SELECT * FROM Номенклатура 


Нельзя ли сделать так, чтобы в 1sqlite было так, как в OLE DB? В принципе, наверное, можно прогонять запросы через метапарсер и тогда будет получаться что-то в этом роде:
Код
Выбрать все
SELECT * FROM sc55 


Т.е., по сути достаточно виртуальные таблицы в SQLite подвешивать к реальным именам таблиц в 1С. Ну и аналогично для реквизитов. У тебя, похоже, реальные имена вылезают, поэтому запросы вида
Код
Выбрать все
SELECT sp3433 FROM sc55 

работать не будут...

Конечно, понятно, что некоторые вещи (типа CREATE CURSOR) в SQLite не заработают. Но, наверное, ведь можно как-то сократить объем переделок (а в некоторых случаях количество переделок свести к нулю)...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 20
ОтправитьПечать