OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 26 Сентябрь, 2018 00:42

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Mysql
СообщениеДобавлено: Четверг, 14 Октябрь, 2010 14:17 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
http://oberoncore.ru/bbcc/subs/mysql/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Пятница, 07 Январь, 2011 23:26 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
Выложен MySQL-драйвер от Ивана Кузьмицкого для подсистемы Sql.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Понедельник, 25 Апрель, 2011 11:01 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Обнаружил маленький недочет в модуле MysqlDriver.
Обрезается последний символ при чтении поля таблицы как строки:

Код:
VAR
   t: SqlDB.Table;
   row: SqlDB.Row;
   i, j: INTEGER;
   ......   
      t.Read(i, row);
      FOR j:= 0 TO LEN(row.fields) - 1 DO
           row.fields[j] ... (* <- во всех полях отсутсвует последний символ*)
      END;

(*Например, при чтении даты-времени, прочитается '2011-03-17 13:00:1' вместо '2011-03-17 13:00:14'*)      
   ......

Я поправил так:
Код:
MODULE MysqlDriver;
   ....
   PROCEDURE (t: Table) ReadVarString   ...
   
   NEW(str, LEN(t.row[column]$) + 1)     (*было NEW(str, LEN(t.row[column]$)*)
   ...

PS. Спасибо за подсистему!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 27 Апрель, 2011 21:02 

Зарегистрирован: Среда, 27 Апрель, 2011 20:03
Сообщения: 8
Откуда: г.Орёл
Извините за глупую просьбу, но можно по подробнее, как установить этот драйвер, и что по мимо него должно быть установлено, что бы можно было работать с базами данных в BlackBox' е


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 27 Апрель, 2011 21:21 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
Иван Колодяжный писал(а):
Извините за глупую просьбу, но можно по подробнее, как установить этот драйвер, и что по мимо него должно быть установлено, что бы можно было работать с базами данных в BlackBox' е

Вы можете работать с базами данных и без этого конкретного драйвера, потому что в комплекте ББ есть уже универсальный драйвер ODBC. Настройте ODBC-соединение и обращайтесь с запросами к серверу БД примерно так, как показано в SqlObxTab!
За деталями обращайтесь к документации подстсемы Sql - там описано практически всё, что нужно для работы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Четверг, 28 Апрель, 2011 15:06 

Зарегистрирован: Среда, 27 Апрель, 2011 20:03
Сообщения: 8
Откуда: г.Орёл
Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 03 Август, 2011 05:12 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2185
Откуда: Красноярск
Для сборки этой подсистемы требуется i21sysIn, неплохо бы его тоже включить в коллекцию подсистем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 03 Август, 2011 08:43 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
он давно там: http://oberoncore.ru/bbcc/subs/i21sys/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Четверг, 10 Ноябрь, 2011 09:28 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
viewtopic.php?p=67419#p67419
Kubanych писал(а):
Как проблему подключения подсистемы Mysql к Linux приложению решали? Там ведь тоже просто указывается protocol = 'MysqlDriver', а модуль сам непосредственно не импортируется? Заранее благодарю.
Насколько я знаю, в подсистеме Mysql текущая реализация Sql-драйвера завязана на Windows и в Linux работать не будет. Вроде бы Борис Рюмшин что-то пробовал, может чего скажет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 16 Ноябрь, 2011 10:09 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 661
Откуда: СССР
Евгений Темиргалеев писал(а):
Насколько я знаю, в подсистеме Mysql текущая реализация Sql-драйвера завязана на Windows и в Linux работать не будет.

Не может - научим. Не хочет - заставим.

Надо в SqlDB IMPORT на SqlDrivers переделать на MysqlDriver,

в самом MysqlDriver (и в других модулях подсистемы Mysql) отключить все вызовы SqlDrivers,
перенести в MysqlDriver импортируемые из SqlDrivers, структуры данных и наследуемые методы,
в (t: Table) Close* добавить новую проверку
Код:
   PROCEDURE (t: Table) Close*, NEW;
   BEGIN
      IF t.open THEN
         t.Cleanup;   (* release table info *)
         IF t.driver#NIL THEN (*ЗДЕСЬ НОВАЯ ПРОВЕРКА*)
            DEC(t.driver.tables);
            IF (t.driver.tables = 0) & ~t.driver.open THEN
               t.driver.Cleanup;   (* release driver info *)
            END;
            t.driver := NIL;   (* allow for garbage collection of driver *)
         END;
         t.open := FALSE;
      END;
   END Close;


нужные методы сделать экспортируемыми и NEW и все должно заработать.

Аналогичное сделано с драйвером Fib, заработало.
viewtopic.php?f=90&t=1648&start=40
Компилятор BlackBox поможет быстро найти, что необходимо исправлять.
Благодаря этому удобству все изменения были сделаны за час-полтора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 16 Ноябрь, 2011 11:45 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
Kubanych писал(а):
Евгений Темиргалеев писал(а):
Насколько я знаю, в подсистеме Mysql текущая реализация Sql-драйвера завязана на Windows и в Linux работать не будет.

Не может - научим. Не хочет - заставим.

Надо в SqlDB IMPORT на SqlDrivers переделать на MysqlDriver,
Вы про решение другой задачи. Сначала надо отвязать реализацию MysqlDriver от Windows.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 16 Ноябрь, 2011 12:05 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2518
Откуда: Россия, Ярославль
Уважаемые господа, хотелось бы отметить, что в отличие от драйвера Fib, про который мне ничего не известно, про драйвер Mysql мне известно, что он лежит в основе подсистемы БД трёх разноплановых крупных проектов, поэтому любое изменение этого драйвера повлечёт десятки человекочасов, потраченных на проверку валидности изменений и отлов сайдэффектов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 16 Ноябрь, 2011 12:19 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
Справедливости ради отмечу, что упомянутые Петром проекты не такие уж и крупные, по общепринятой классификации :). Но это не делает их менее реальными, как и не менее реален внеплановый геморрой с внезапно изменённым драйвером мускля.

Поэтому огромная просьба - по возможности, основную ветку не трогать. Если уж назрела необходимость что-то пилить, то можно завести экспериментальную ветку и доводить до ума в ней. А в основную вносить правки только после капитального коллективного тестирования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Среда, 16 Ноябрь, 2011 13:13 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
Иван Кузьмицкий писал(а):
Но это не делает их менее реальными, как и не менее реален внеплановый геморрой с внезапно изменённым драйвером мускля.

Поэтому огромная просьба - по возможности, основную ветку не трогать.
Обратите, пожалуйста, внимание на документ bbcc/start п. "3. Проектные группы". Вы запросили закрытую разработку Mysql. Поэтому волноваться не стоит --- никаких внезапных (без вашего ведома) изменений возникнуть не может.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Воскресенье, 20 Ноябрь, 2011 04:50 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 661
Откуда: СССР
Здравствуйте.
Евгений Темиргалеев писал(а):
вопрос использования 32битного ББ в 64битном линухе связан только с наличием соотв. 32битной библиотеки. Аналогичные случаи Mysql ... тому подтверждение.

Можно об этом поподробней или соотв. ссылку? Хочу попробовать из 32 битного ББ приложения в 64 битном Linux подключиться к MySQL через подсистему Sql.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Воскресенье, 20 Ноябрь, 2011 10:45 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4485
Откуда: Россия, Орёл
Здравствуйте.
Kubanych писал(а):
Евгений Темиргалеев писал(а):
вопрос использования 32битного ББ в 64битном линухе связан только с наличием соотв. 32битной библиотеки. Аналогичные случаи Mysql ... тому подтверждение.
Можно об этом поподробней или соотв. ссылку? Хочу попробовать из 32 битного ББ приложения в 64 битном Linux подключиться к MySQL через подсистему Sql.
1) Чтобы из 32битного ББ приложения в 64битном Linux использовать 32битную клиентскую библиотеку MySQL C-API, её нужно "заиметь" в наличии, т.к. из стандартных 64битных пакетов ставится 64битная библиотека. См. п. "Динамическая бибиотека" в документации MysqlLib.

2) Чтобы посредством компонента-службы Sql подключиться к MySQL в Linux, нужно иметь Linux-реализацию Sql-драйвера MySQL. Пока есть только Windows-реализация Sql-драйвера MySQL.

P.S. Написание и тестирование интерфейсного модуля MysqlLib выполнялось из 64битного Linux.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Суббота, 03 Декабрь, 2011 09:08 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
Вести с полей.

Вчера опробовал подключение к 64-битному MySQL, под виндой. Всё прошло успешно.
Правда, выяснилось, что libmysql.dll от мускля 5.5 не подходит к драйверу, откомпиленному в ББ для версии 5.1. И наоборот, libmysql.dll 5.1 не подключается к серверу версии 5.5. Так что версионность надо соблюдать!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Вторник, 11 Март, 2014 23:13 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2518
Откуда: Россия, Ярославль
Не знаю, стоит ли заводить отдельную тему.
Вот понадобилось тут запустить мускль под линуксом, поэтому я наконец добрался до драйвера, на базе ваших наработок запилил форк в стиле "объектный интерфейс". Попутно переименовал подсистему в Mysql5 https://bitbucket.org/petryxa/mysql5
Работает так же со встроенным сервером мускля (но пока только под win32). Сетевые клиенты работают в linux/windows без перекомпиляций.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Воскресенье, 16 Март, 2014 16:55 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2518
Откуда: Россия, Ярославль
Провел эксперимент на базе драйвера Mysql и подсистемы управления фоновыми ББ viewtopic.php?p=86283#p86283
Реальный драйвер Mysql подключается к БД, работая в фоновом ББ особой сборки, а на рабочем ББ запущен только виртуальный драйвер, который общается с настоящим драйвером посредством межпроцессной шины сообщений. При этом виртуальный драйвер полностью асинхронный и не блокирует каркас. А результаты выполнения запроса передаются с помощью Stores.Store.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mysql
СообщениеДобавлено: Суббота, 21 Июнь, 2014 17:33 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8989
Откуда: Россия, Орёл
Важной возможностью является исполнение нескольких запросов через ;, т.к. любая операция запрос-ответ является дорогой и просто не может быть выполнена быстрее нескольких сотен (максимум тысяча-две) в секунду.

А сохранение в базе какого-нибудь сложного объекта с подобъектами может требовать большой серии INSERT-ов, а если ещё сохраняется сотня-другая объектов...

В настоящий момент MysqlDriver не поддерживает возможности выполнить statement, содержащий через ; несколько запросов SQL.
Разрешить выполнять много SELECT-ов невозможно в рамках логики посистемы Sql, но с SELECT-ами не так критично - в конце концов, там есть JOIN (использование которого и предполагается в классической реляционной парадигме для выборки нужных данных одним запросом).

Короче, для возможности выполнения INSERT-ов или UPDATE-ов за один db.Exec я поправил немного MysqlDriver - прилагаю файл.
Мои изменения там выделены красным.

Код:
      Driver = POINTER TO RECORD (SqlDrivers.Driver)
         ....
         multiple: BOOLEAN
      END;

       (* новая процедура *)
   PROCEDURE GetStatementType (IN statement: ARRAY OF CHAR; OUT op: ARRAY OF CHAR);
      CONST tab = 09X; CR = 0DX; LF = 0AX;
      VAR beg, end: INTEGER;
   BEGIN
      beg := 0;
      WHILE (statement[beg] = ' ') OR (statement[beg] = tab) OR (statement [beg] = CR)
         OR (statement[beg] = LF) DO
         INC(beg)         
      END;
      end := beg;
      WHILE (statement[end] # 0X) & ~( (statement[end] = ' ') OR (statement[end] = tab) OR (statement [end] = CR) OR (statement[end] = LF) ) DO
         INC(end)
      END;
      Strings.Extract(statement, beg, end-beg, op)
   END GetStatementType;

   PROCEDURE (d: Driver) BeginExec (IN statement: ARRAY OF CHAR; data: SqlDrivers.Blob;
                                             async, showErr: BOOLEAN; OUT res: INTEGER);
      VAR ......
            stype: ARRAY 32 OF CHAR;
   BEGIN
....
         GetStatementType(statement, stype);
         d.multiple := (stype = "INSERT") OR (stype = "UPDATE");
         IF d.multiple THEN
            res := Mysql.mysql_set_server_option(d.mysql, Mysql.MYSQL_OPTION_MULTI_STATEMENTS_ON)
         END;
......
   END BeginExec;


   PROCEDURE (d: Driver) EndExec (VAR t: SqlDrivers.Table; OUT rows, columns, res: INTEGER);
   BEGIN
......
      IF ~d.multiple THEN
         resultSet := Mysql.mysql_store_result(d.mysql); (* read the entire result of a query to the client *)
      ELSE
         REPEAT
            resultSet := Mysql.mysql_store_result(d.mysql);
            IF resultSet # NIL THEN
               Mysql.mysql_free_result(resultSet)
            END
         UNTIL Mysql.mysql_next_result(d.mysql) # 0;
         res := Mysql.mysql_set_server_option(d.mysql, Mysql.MYSQL_OPTION_MULTI_STATEMENTS_OFF)
      END;
......



Вложения:
Driver.odc [23.81 КБ]
Скачиваний: 91
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB