OberonCore https://forum.oberoncore.ru/ |
|
Mysql https://forum.oberoncore.ru/viewtopic.php?f=90&t=2908 |
Страница 1 из 2 |
Автор: | Евгений Темиргалеев [ Четверг, 14 Октябрь, 2010 14:17 ] |
Заголовок сообщения: | Mysql |
http://oberoncore.ru/bbcc/subs/mysql/ |
Автор: | Евгений Темиргалеев [ Пятница, 07 Январь, 2011 23:26 ] |
Заголовок сообщения: | Re: Mysql |
Выложен MySQL-драйвер от Ивана Кузьмицкого для подсистемы Sql. |
Автор: | Вячеслав Бойко [ Понедельник, 25 Апрель, 2011 11:01 ] |
Заголовок сообщения: | Re: Mysql |
Обнаружил маленький недочет в модуле 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. Спасибо за подсистему! |
Автор: | Иван Колодяжный [ Среда, 27 Апрель, 2011 21:02 ] |
Заголовок сообщения: | Re: Mysql |
Извините за глупую просьбу, но можно по подробнее, как установить этот драйвер, и что по мимо него должно быть установлено, что бы можно было работать с базами данных в BlackBox' е |
Автор: | Иван Кузьмицкий [ Среда, 27 Апрель, 2011 21:21 ] |
Заголовок сообщения: | Re: Mysql |
Иван Колодяжный писал(а): Извините за глупую просьбу, но можно по подробнее, как установить этот драйвер, и что по мимо него должно быть установлено, что бы можно было работать с базами данных в BlackBox' е Вы можете работать с базами данных и без этого конкретного драйвера, потому что в комплекте ББ есть уже универсальный драйвер ODBC. Настройте ODBC-соединение и обращайтесь с запросами к серверу БД примерно так, как показано в SqlObxTab! За деталями обращайтесь к документации подстсемы Sql - там описано практически всё, что нужно для работы. |
Автор: | Иван Колодяжный [ Четверг, 28 Апрель, 2011 15:06 ] |
Заголовок сообщения: | Re: Mysql |
Спасибо. |
Автор: | Иван Денисов [ Среда, 03 Август, 2011 05:12 ] |
Заголовок сообщения: | Re: Mysql |
Для сборки этой подсистемы требуется i21sysIn, неплохо бы его тоже включить в коллекцию подсистем. |
Автор: | Евгений Темиргалеев [ Среда, 03 Август, 2011 08:43 ] |
Заголовок сообщения: | Re: Mysql |
он давно там: http://oberoncore.ru/bbcc/subs/i21sys/ |
Автор: | Евгений Темиргалеев [ Четверг, 10 Ноябрь, 2011 09:28 ] |
Заголовок сообщения: | Re: Mysql |
viewtopic.php?p=67419#p67419 Kubanych писал(а): Как проблему подключения подсистемы Mysql к Linux приложению решали? Там ведь тоже просто указывается protocol = 'MysqlDriver', а модуль сам непосредственно не импортируется? Заранее благодарю. Насколько я знаю, в подсистеме Mysql текущая реализация Sql-драйвера завязана на Windows и в Linux работать не будет. Вроде бы Борис Рюмшин что-то пробовал, может чего скажет.
|
Автор: | Kubanych [ Среда, 16 Ноябрь, 2011 10:09 ] |
Заголовок сообщения: | Re: Mysql |
Евгений Темиргалеев писал(а): Насколько я знаю, в подсистеме 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 поможет быстро найти, что необходимо исправлять. Благодаря этому удобству все изменения были сделаны за час-полтора. |
Автор: | Евгений Темиргалеев [ Среда, 16 Ноябрь, 2011 11:45 ] |
Заголовок сообщения: | Re: Mysql |
Kubanych писал(а): Евгений Темиргалеев писал(а): Насколько я знаю, в подсистеме Mysql текущая реализация Sql-драйвера завязана на Windows и в Linux работать не будет. Не может - научим. Не хочет - заставим. Надо в SqlDB IMPORT на SqlDrivers переделать на MysqlDriver, |
Автор: | Пётр Кушнир [ Среда, 16 Ноябрь, 2011 12:05 ] |
Заголовок сообщения: | Re: Mysql |
Уважаемые господа, хотелось бы отметить, что в отличие от драйвера Fib, про который мне ничего не известно, про драйвер Mysql мне известно, что он лежит в основе подсистемы БД трёх разноплановых крупных проектов, поэтому любое изменение этого драйвера повлечёт десятки человекочасов, потраченных на проверку валидности изменений и отлов сайдэффектов. |
Автор: | Иван Кузьмицкий [ Среда, 16 Ноябрь, 2011 12:19 ] |
Заголовок сообщения: | Re: Mysql |
Справедливости ради отмечу, что упомянутые Петром проекты не такие уж и крупные, по общепринятой классификации . Но это не делает их менее реальными, как и не менее реален внеплановый геморрой с внезапно изменённым драйвером мускля. Поэтому огромная просьба - по возможности, основную ветку не трогать. Если уж назрела необходимость что-то пилить, то можно завести экспериментальную ветку и доводить до ума в ней. А в основную вносить правки только после капитального коллективного тестирования. |
Автор: | Евгений Темиргалеев [ Среда, 16 Ноябрь, 2011 13:13 ] |
Заголовок сообщения: | Re: Mysql |
Иван Кузьмицкий писал(а): Но это не делает их менее реальными, как и не менее реален внеплановый геморрой с внезапно изменённым драйвером мускля. Обратите, пожалуйста, внимание на документ bbcc/start п. "3. Проектные группы". Вы запросили закрытую разработку Mysql. Поэтому волноваться не стоит --- никаких внезапных (без вашего ведома) изменений возникнуть не может.
Поэтому огромная просьба - по возможности, основную ветку не трогать. |
Автор: | Kubanych [ Воскресенье, 20 Ноябрь, 2011 04:50 ] |
Заголовок сообщения: | Re: Mysql |
Здравствуйте. Евгений Темиргалеев писал(а): вопрос использования 32битного ББ в 64битном линухе связан только с наличием соотв. 32битной библиотеки. Аналогичные случаи Mysql ... тому подтверждение. Можно об этом поподробней или соотв. ссылку? Хочу попробовать из 32 битного ББ приложения в 64 битном Linux подключиться к MySQL через подсистему Sql. |
Автор: | Евгений Темиргалеев [ Воскресенье, 20 Ноябрь, 2011 10:45 ] |
Заголовок сообщения: | Re: Mysql |
Здравствуйте. Kubanych писал(а): Евгений Темиргалеев писал(а): вопрос использования 32битного ББ в 64битном линухе связан только с наличием соотв. 32битной библиотеки. Аналогичные случаи Mysql ... тому подтверждение. Можно об этом поподробней или соотв. ссылку? Хочу попробовать из 32 битного ББ приложения в 64 битном Linux подключиться к MySQL через подсистему Sql.2) Чтобы посредством компонента-службы Sql подключиться к MySQL в Linux, нужно иметь Linux-реализацию Sql-драйвера MySQL. Пока есть только Windows-реализация Sql-драйвера MySQL. P.S. Написание и тестирование интерфейсного модуля MysqlLib выполнялось из 64битного Linux. |
Автор: | Иван Кузьмицкий [ Суббота, 03 Декабрь, 2011 09:08 ] |
Заголовок сообщения: | Re: Mysql |
Вести с полей. Вчера опробовал подключение к 64-битному MySQL, под виндой. Всё прошло успешно. Правда, выяснилось, что libmysql.dll от мускля 5.5 не подходит к драйверу, откомпиленному в ББ для версии 5.1. И наоборот, libmysql.dll 5.1 не подключается к серверу версии 5.5. Так что версионность надо соблюдать! |
Автор: | Пётр Кушнир [ Вторник, 11 Март, 2014 23:13 ] |
Заголовок сообщения: | Re: Mysql |
Не знаю, стоит ли заводить отдельную тему. Вот понадобилось тут запустить мускль под линуксом, поэтому я наконец добрался до драйвера, на базе ваших наработок запилил форк в стиле "объектный интерфейс". Попутно переименовал подсистему в Mysql5 https://bitbucket.org/petryxa/mysql5 Работает так же со встроенным сервером мускля (но пока только под win32). Сетевые клиенты работают в linux/windows без перекомпиляций. |
Автор: | Пётр Кушнир [ Воскресенье, 16 Март, 2014 16:55 ] |
Заголовок сообщения: | Re: Mysql |
Провел эксперимент на базе драйвера Mysql и подсистемы управления фоновыми ББ viewtopic.php?p=86283#p86283 Реальный драйвер Mysql подключается к БД, работая в фоновом ББ особой сборки, а на рабочем ББ запущен только виртуальный драйвер, который общается с настоящим драйвером посредством межпроцессной шины сообщений. При этом виртуальный драйвер полностью асинхронный и не блокирует каркас. А результаты выполнения запроса передаются с помощью Stores.Store. |
Автор: | Илья Ермаков [ Суббота, 21 Июнь, 2014 17:33 ] | ||
Заголовок сообщения: | Re: Mysql | ||
Важной возможностью является исполнение нескольких запросов через ;, т.к. любая операция запрос-ответ является дорогой и просто не может быть выполнена быстрее нескольких сотен (максимум тысяча-две) в секунду. А сохранение в базе какого-нибудь сложного объекта с подобъектами может требовать большой серии 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; ......
|
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |