Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Определить типа сервера БД запросом(ами) / 25 сообщений из 27, страница 1 из 2
09.10.2012, 19:13
    #37990577
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Софтина должна работать на зоопарке СУБД, так как логика там простая, скорее её даже нет вовсе, только тупо insert update delete select и иногда create table.

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

Идея заключается в возможности парой запросов после подключения (ну скажем подключение через ODBC или DBX - так что большой разницы в параметрах нет) определить, что за зверя подсунули. Основывается идея на возможности придушить исключение после select @@version или select from dual или других подобных характерых запросах. Если это реально за пару запросов определить СУБД (и в идеале ещё и версию) - я тогда не буду пропихивать типа сервера, а определю это самостоятельно SQL-запросами.

Решение ищется для "большой пятёрки" + огнептица + мускуль + постгреса. Если будет работать для извратов типа мимера - тем лучше ))))

зы. Понимаю что брежу, но давайте назовём это спортивным интересом ))).
...
Рейтинг: 0 / 0
09.10.2012, 19:56
    #37990614
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей Васкецовну скажем подключение через ODBC или DBX - так что большой разницы в
параметрах нет
Ага. А та самая "маленькая разница в параметрах" и есть указание используемого драйвера,
то бишь СУБД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.10.2012, 19:56
    #37990617
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей Васкецовпосле подключения (ну скажем подключение через ODBC...

Интересно, как можно подключиться к чему-то через ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?!

ЗЫ. IMHO, в общем случае задача решения не имеет, если только тупо не пытаться перебирать драйвера "большой пятёрки" и производить попытку установить коннект с учетом необходимых параметров строки подключения для каждой из СУБД. Т.е. без диалога с пользователем не обойтись.
...
Рейтинг: 0 / 0
09.10.2012, 20:20
    #37990639
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
pkarklin, из постановки задачи следует, чтодрайвер уже указан и настроен. А тут программисту захотелось узнать, что за БД ему подсунули, чтобы что-то простенькое в create/insert/update/delete/select подкрутить...
...
Рейтинг: 0 / 0
09.10.2012, 20:31
    #37990653
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
pkarklinИнтересно, как можно подключиться к чему-то через ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?!
Ну конкретно тупо по настроенному системному алиасу. Надо лишь алиас, логин и пароль ))).
Да и хотелось бы попробовать без привязки к типу драйвера. Понятно что можно и параметры подключения понюхать, и класс объекта драйвера dbx поглядеть. Но, скажем так, спортивный интерес в голом SQL и реакции на его результат выполнения или факт невыполнения по ошибке.

pkarklinи производить попытку установить коннект
Давай допустим, что коннект уже есть. Поэтому задача по определнию имеет решение, и число запросов не более чем 8 в самом худшем случае (по числу проверяемых СУБД). С учётом select @@version и других, работающих более чем на одной СУБД, оно очевидно уменьшается. Вопрос в конкретных магических командах и результирующем минимуме числа таковых.

АнатоЛойчтобы что-то простенькое в create/insert/update/delete/select подкрутить...
Ну в общем да. Я конечно могу и тупо к системным таблицам попробовать обратиться, но хотелось бы решения проще, интуитивно кажется, что оно должно существовать и быть достаточно простым.

Если кому-то не нравится постановка про "спортивный интерес" - давайте модифицируем это как возможный вопрос на собеседовании ))))))))))))))))
...
Рейтинг: 0 / 0
09.10.2012, 20:34
    #37990655
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
pkarklinчерез ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?!
Вот так на перле:
Код: php
1.
$dbh = DBI->connect('dbi:ODBC:GIS', 'sa', '', {AutoCommit => 1}) || die "Can't connect to server";
...
Рейтинг: 0 / 0
09.10.2012, 20:41
    #37990664
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей ВаскецовДавай допустим, что коннект уже есть.
В этом случае SQLGetInfo(), например, выдаст названия драйвера, СУБД и даже её версию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.10.2012, 21:05
    #37990683
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
АнатоЛойиз постановки задачи следует, чтодрайвер уже указан и настроен. А тут программисту захотелось узнать, что за БД ему подсунули, чтобы что-то простенькое в create/insert/update/delete/select подкрутить...

Первое, что я бы спросил у программиста на собеседовании: "Если коннект установлен и драйвер уже указан, то как тебе могло придти в голову узнать, что за СУБД с помощью create/insert/update/delete/select".

Сергей Васкецов Если кому-то не нравится постановка про "спортивный интерес" - давайте модифицируем это как возможный вопрос на собеседовании ))))))))))))))))

Нет, уж, пусть вопрос останется спортивным.
...
Рейтинг: 0 / 0
09.10.2012, 21:06
    #37990685
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Dimitry SibiryakovSQLGetInfo()
Нет привязки к ODBC API
...
Рейтинг: 0 / 0
09.10.2012, 21:08
    #37990687
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
pkarklinЕсли коннект установлен и драйвер уже указан, то как тебе могло придти в голову узнать, что за СУБД с помощью create/insert/update/delete/select
Выше пример коннекта на перле. Догадаешься к какому серверу? )))
...
Рейтинг: 0 / 0
09.10.2012, 21:10
    #37990691
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей ВаскецовНет привязки к ODBC API
Ага, а запрос ты собрался отправлять телепатически, без API?.. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.10.2012, 21:13
    #37990696
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей ВаскецовВыше пример коннекта на перле. Догадаешься к какому серверу? )))

Учетная запись sa есть у MS SQL и у Sybase. Не догадываюсь...
...
Рейтинг: 0 / 0
09.10.2012, 21:15
    #37990697
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Dimitry Sibiryakovзапрос ты собрался отправлять телепатически, без API?
Выше пример коннекта на перле.

зы. Я выше написал, что спортивный интерес в реализации проверки на голом SQL. Чтобы не зависеть ни от драйверов, ни от прочих транспортов и языка.
...
Рейтинг: 0 / 0
09.10.2012, 21:16
    #37990699
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
pkarklinУчетная запись sa есть у MS SQL и у Sybase
А у каких-то других СУБД есть запрет на создание такого логина? )))
...
Рейтинг: 0 / 0
09.10.2012, 21:19
    #37990706
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей ВаскецовА у каких-то других СУБД есть запрет на создание такого логина? )))

Спасибо, кэп, нет.
...
Рейтинг: 0 / 0
09.10.2012, 21:25
    #37990711
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей ВаскецовВыше пример коннекта на перле.
И что? Тебе тупо лень поискать в документации по DBI аналогичную функцию?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.10.2012, 21:29
    #37990718
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Dimitry SibiryakovТебе тупо лень поискать в документации по DBI аналогичную функцию?..
Не-а, задача немного другая )))
...
Рейтинг: 0 / 0
09.10.2012, 21:36
    #37990724
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей ВаскецовТебе тупо лень поискать в документации по DBI аналогичную функцию?..
Не-а, задача немного другая )))[/quot]

Тогда только запросы, котоые гарантированно выполняться только на одной из СУБД, которые бы возвращали для "правильной" СУБД всю необходимую информацию.
...
Рейтинг: 0 / 0
09.10.2012, 22:06
    #37990743
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
pkarklinТогда только запросы, котоые гарантированно выполняться только на одной из СУБД
Кэп подказывает про select @@version )))
И я даже ещё не уверен, что у каких-нить постгресов или DB2 нет своего дополнительного формата комментариев. На этом тоже можно было бы попробовать сыграть. Я ж не со всеми работал, ща вот маны штудирую под пиво ))
...
Рейтинг: 0 / 0
09.10.2012, 22:10
    #37990746
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Сергей ВаскецовКэп подказывает про select @@version )))
И я даже ещё не уверен, что у каких-нить постгресов или DB2 нет своего дополнительного формата комментариев. На этом тоже можно было бы попробовать сыграть. Я ж не со всеми работал, ща вот маны штудирую под пиво ))

Я тоже не совсеми. select @@version прокатит точно на MS SQL и Sybase.
...
Рейтинг: 0 / 0
09.10.2012, 22:15
    #37990751
Gallagher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Для этого нужно знать/выбрать несколько специфичных фич, которые работают по разному в разных субд.
Первое что приходит на ум, проверить как работает MVCC, установив пару сессий. Можно определить поддерживаемые режимы изоляции транзакций (скорее всего один, дефолтовый, который будет выставлен на сессию через ODBC драйвер, если не указано иного). Но многое из этого, насколько мне известно, будет варьировать даже в пределах одной СУБД в зависимости от выбранного storage backend'а.
Второе, что приходит - покрутить запросики, но опять таки, ODBC драйвер скорее всего будет работать в режиме совместимости ANSI XY и зарезать любой SQL выпадающий из него. Если же ODBC драйвер тупо проксирует текст запроса без синтаксических проверок, то можно погонять какой-нибудь database-specific sql, как например select без from для mySQL или наличие dual для Oracle.
...
Рейтинг: 0 / 0
09.10.2012, 22:19
    #37990755
Gallagher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Самым типичным мерилом будут различия в наличии/поведении скалярных функций. Для этого нужно создать табличку, опционально налить данных и погонять простой запрос с разными специфичными функциями
...
Рейтинг: 0 / 0
09.10.2012, 22:23
    #37990758
Gallagher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Еще, зная физические ограничения (если не жалко времени сразу после установления соединения) можно посоздавать структуры критических размеров (кол-во полей, типы данных) и тп . Но это уже за гранью DML.
...
Рейтинг: 0 / 0
09.10.2012, 22:37
    #37990771
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Gallagher, нужно что-то сильно проще.
Как вариант до которого допетрил - это при генерации скриптов из модели сделать что-то типа
Код: sql
1.
2.
select @@version as v
into DUAL


ну обломается - и хрен бы с ним.
Зато будет реальная польза от SELECT * FROM DUAL
...
Рейтинг: 0 / 0
09.10.2012, 23:17
    #37990808
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить типа сервера БД запросом(ами)
Для MySQL раскопал вот что, типа код внутри /*!1 */ отработает начиная с версии 1:
Код: sql
1.
SELECT /*!1 'mysql' as f, */ * from DUAL


зы. есичо - не проверял )))
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Определить типа сервера БД запросом(ами) / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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