|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Софтина должна работать на зоопарке СУБД, так как логика там простая, скорее её даже нет вовсе, только тупо insert update delete select и иногда create table. Раньше всегда в случае необходимости поддержки зоопарка "пропихивал" типа сервера из параметров подключения. А вот на этот раз задумался, может можно этого избежать, и если да - то какой ценой. Идея заключается в возможности парой запросов после подключения (ну скажем подключение через ODBC или DBX - так что большой разницы в параметрах нет) определить, что за зверя подсунули. Основывается идея на возможности придушить исключение после select @@version или select from dual или других подобных характерых запросах. Если это реально за пару запросов определить СУБД (и в идеале ещё и версию) - я тогда не буду пропихивать типа сервера, а определю это самостоятельно SQL-запросами. Решение ищется для "большой пятёрки" + огнептица + мускуль + постгреса. Если будет работать для извратов типа мимера - тем лучше )))) зы. Понимаю что брежу, но давайте назовём это спортивным интересом ))). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 19:13 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей Васкецовну скажем подключение через ODBC или DBX - так что большой разницы в параметрах нет Ага. А та самая "маленькая разница в параметрах" и есть указание используемого драйвера, то бишь СУБД. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 19:56 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей Васкецовпосле подключения (ну скажем подключение через ODBC... Интересно, как можно подключиться к чему-то через ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?! ЗЫ. IMHO, в общем случае задача решения не имеет, если только тупо не пытаться перебирать драйвера "большой пятёрки" и производить попытку установить коннект с учетом необходимых параметров строки подключения для каждой из СУБД. Т.е. без диалога с пользователем не обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 19:56 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
pkarklin, из постановки задачи следует, чтодрайвер уже указан и настроен. А тут программисту захотелось узнать, что за БД ему подсунули, чтобы что-то простенькое в create/insert/update/delete/select подкрутить... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 20:20 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
pkarklinИнтересно, как можно подключиться к чему-то через ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?! Ну конкретно тупо по настроенному системному алиасу. Надо лишь алиас, логин и пароль ))). Да и хотелось бы попробовать без привязки к типу драйвера. Понятно что можно и параметры подключения понюхать, и класс объекта драйвера dbx поглядеть. Но, скажем так, спортивный интерес в голом SQL и реакции на его результат выполнения или факт невыполнения по ошибке. pkarklinи производить попытку установить коннект Давай допустим, что коннект уже есть. Поэтому задача по определнию имеет решение, и число запросов не более чем 8 в самом худшем случае (по числу проверяемых СУБД). С учётом select @@version и других, работающих более чем на одной СУБД, оно очевидно уменьшается. Вопрос в конкретных магических командах и результирующем минимуме числа таковых. АнатоЛойчтобы что-то простенькое в create/insert/update/delete/select подкрутить... Ну в общем да. Я конечно могу и тупо к системным таблицам попробовать обратиться, но хотелось бы решения проще, интуитивно кажется, что оно должно существовать и быть достаточно простым. Если кому-то не нравится постановка про "спортивный интерес" - давайте модифицируем это как возможный вопрос на собеседовании )))))))))))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 20:31 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
pkarklinчерез ODBC (или через другой механизм доступа к данным) не указав конкретного драйвера?! Вот так на перле: Код: php 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 20:34 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей ВаскецовДавай допустим, что коннект уже есть. В этом случае SQLGetInfo(), например, выдаст названия драйвера, СУБД и даже её версию. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 20:41 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
АнатоЛойиз постановки задачи следует, чтодрайвер уже указан и настроен. А тут программисту захотелось узнать, что за БД ему подсунули, чтобы что-то простенькое в create/insert/update/delete/select подкрутить... Первое, что я бы спросил у программиста на собеседовании: "Если коннект установлен и драйвер уже указан, то как тебе могло придти в голову узнать, что за СУБД с помощью create/insert/update/delete/select". Сергей Васкецов Если кому-то не нравится постановка про "спортивный интерес" - давайте модифицируем это как возможный вопрос на собеседовании )))))))))))))))) Нет, уж, пусть вопрос останется спортивным. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:05 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSQLGetInfo() Нет привязки к ODBC API ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:06 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
pkarklinЕсли коннект установлен и драйвер уже указан, то как тебе могло придти в голову узнать, что за СУБД с помощью create/insert/update/delete/select Выше пример коннекта на перле. Догадаешься к какому серверу? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:08 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей ВаскецовНет привязки к ODBC API Ага, а запрос ты собрался отправлять телепатически, без API?.. Ню-ню... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:10 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей ВаскецовВыше пример коннекта на перле. Догадаешься к какому серверу? ))) Учетная запись sa есть у MS SQL и у Sybase. Не догадываюсь... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:13 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovзапрос ты собрался отправлять телепатически, без API? Выше пример коннекта на перле. зы. Я выше написал, что спортивный интерес в реализации проверки на голом SQL. Чтобы не зависеть ни от драйверов, ни от прочих транспортов и языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:15 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
pkarklinУчетная запись sa есть у MS SQL и у Sybase А у каких-то других СУБД есть запрет на создание такого логина? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:16 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей ВаскецовА у каких-то других СУБД есть запрет на создание такого логина? ))) Спасибо, кэп, нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:19 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей ВаскецовВыше пример коннекта на перле. И что? Тебе тупо лень поискать в документации по DBI аналогичную функцию?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:25 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТебе тупо лень поискать в документации по DBI аналогичную функцию?.. Не-а, задача немного другая ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:29 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей ВаскецовТебе тупо лень поискать в документации по DBI аналогичную функцию?.. Не-а, задача немного другая )))[/quot] Тогда только запросы, котоые гарантированно выполняться только на одной из СУБД, которые бы возвращали для "правильной" СУБД всю необходимую информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 21:36 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
pkarklinТогда только запросы, котоые гарантированно выполняться только на одной из СУБД Кэп подказывает про select @@version ))) И я даже ещё не уверен, что у каких-нить постгресов или DB2 нет своего дополнительного формата комментариев. На этом тоже можно было бы попробовать сыграть. Я ж не со всеми работал, ща вот маны штудирую под пиво )) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 22:06 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Сергей ВаскецовКэп подказывает про select @@version ))) И я даже ещё не уверен, что у каких-нить постгресов или DB2 нет своего дополнительного формата комментариев. На этом тоже можно было бы попробовать сыграть. Я ж не со всеми работал, ща вот маны штудирую под пиво )) Я тоже не совсеми. select @@version прокатит точно на MS SQL и Sybase. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 22:10 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Для этого нужно знать/выбрать несколько специфичных фич, которые работают по разному в разных субд. Первое что приходит на ум, проверить как работает MVCC, установив пару сессий. Можно определить поддерживаемые режимы изоляции транзакций (скорее всего один, дефолтовый, который будет выставлен на сессию через ODBC драйвер, если не указано иного). Но многое из этого, насколько мне известно, будет варьировать даже в пределах одной СУБД в зависимости от выбранного storage backend'а. Второе, что приходит - покрутить запросики, но опять таки, ODBC драйвер скорее всего будет работать в режиме совместимости ANSI XY и зарезать любой SQL выпадающий из него. Если же ODBC драйвер тупо проксирует текст запроса без синтаксических проверок, то можно погонять какой-нибудь database-specific sql, как например select без from для mySQL или наличие dual для Oracle. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 22:15 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Самым типичным мерилом будут различия в наличии/поведении скалярных функций. Для этого нужно создать табличку, опционально налить данных и погонять простой запрос с разными специфичными функциями ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 22:19 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Еще, зная физические ограничения (если не жалко времени сразу после установления соединения) можно посоздавать структуры критических размеров (кол-во полей, типы данных) и тп . Но это уже за гранью DML. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 22:23 |
|
Определить типа сервера БД запросом(ами)
|
|||
---|---|---|---|
#18+
Gallagher, нужно что-то сильно проще. Как вариант до которого допетрил - это при генерации скриптов из модели сделать что-то типа Код: sql 1. 2.
ну обломается - и хрен бы с ним. Зато будет реальная польза от SELECT * FROM DUAL ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2012, 22:37 |
|
|
start [/forum/topic.php?fid=35&msg=37990664&tid=1552515]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 235ms |
total: | 362ms |
0 / 0 |