Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PostgreSQL > Драйвер PosgreSQL (sources) |
Автор: vegaua 19.12.2012, 12:54 |
Добрый день. Стоит задача "подпилить" postgresql драйвер для работы с через jdeveloper(что бы сущности, созданные в среде oracle корректно заливались в базу postgres). Вопрос: какой класс в сорцах porsgres driver отвечает за создание sql запроса? |
Автор: tzirechnoy 19.12.2012, 13:13 |
За создание sql-запроса в драйверах postgresql отвечает приложэние и программист, которые этот драйвер используют. Драйверов postgresql, кстати, заметно более одного, под разные языки в первую очередь. Ну, поскольку протокол простенький -- вот и наделали. |
Автор: vegaua 19.12.2012, 13:23 | ||||
уже готов. а какое значение он имеет сейчас? это уже следующий шаг. Добавлено через 6 минут и 13 секунд
не наблюдал классификации драйверов postgresql по языкам, если можно - ссылочку. использую драйвер postgresql-jdbc-9.0-802 |
Автор: LSD 19.12.2012, 14:09 |
Это 30% работы, еще 60% это трансформация синтаксического дерева и 10% генерация SQL кода для Посгреса и написание своего врапера над двайвером. |
Автор: vegaua 19.12.2012, 14:57 | ||
![]() Добавлено через 21 секунду Вижу, что Вы хорошо вникли в суть проблемы, но помочь не можете или не хотите |
Автор: LSD 19.12.2012, 15:26 | ||
Я вник в проблему настолько насколько позволило описание проблемы. А вот вы не хотите понять простую вещь, что драйвер синтаксический разбор запросов не производит, это делает сервер. И не разбираясь в теме, лезть руками в драйвер совершенно не стоит. Ну а раз у вас уже готов код по преобразованию запросов из диалекта Oracle в диалек PostgreSQL, то написать враппер обертку над драйвером PostgreSQL не составит труда. Берете http://docs.oracle.com/javase/6/docs/technotes/guides/jdbc/ создаете свою реализацию которая будет деленировать вызовы к реальному драйверу, по пути подменяя запросы. |
Автор: vegaua 19.12.2012, 15:51 | ||
Зачем делать обертку над драйвером, если есть возможность дописать код внутри него? В классе AbstractJdbc2Statement есть метод parseSql в котором и происходит синтаксический разбор. |
Автор: Zloxa 19.12.2012, 19:40 |
Синтаксический разбор, запросов, как правило, производится таки на сервере а не на клиенте (на стороне которого работает драйвер). Может быть, конечно, на клиенте реализуется какой никакой препарсинг с целью разделить стайтменты, подставить макроподстановки... трансформировать в конце концов запрос в диалект платформы. Но на сервер отдается именно запрос. И указанный вами метод, скорее всего, и делает это - передает запрос серверу, и слушает его ответ. Потому таки первый вопрос - вопрос трансформации запросов с диалекта PG в диалект оракле. Задача мутная, рутинная и бесперспективная. |
Автор: LSD 20.12.2012, 11:59 | ||||||
1. Проще локализовывать ошибки. 2. Можно спокойно обновлять драйвер не трогая враппер. 3. Хоть вы этого и не понимаете, но задача преобразования запросов из диалекта Oracle в диалект PostgreSQL, очень нетривиальна (разумеется если речь идет о полной поддержке синтаксиса, а не замене VARCHAR2 на VARCHAR). И требует много кода, не говоря уж про усилия по реализации.
Очень странно, что человек который смог реализовать синтаксический анализатор для Oracle SQL, не смог понять что метод просто ищет закрывающую скобку в строке (там даже это написано в комментарии ![]()
|
Автор: vegaua 20.12.2012, 13:59 | ||
ценят не по словам, а по делам |
Автор: tzirechnoy 20.12.2012, 18:16 | ||
Я тожэ не наблюдал. Но, как минимум, есть "основная" сишная libpq, на её основе построены дефолтные биндинги к dbi/perl и dbi/ruby, такжэ к хаскеллю, питону, тиклю. В тикле и питоне (как минимум) есть (в дополнение, если требуются) написанные биндинги на чистом тикле и питоне. Кстати, в питоне разнообразных адаптэров что-то вообще дофига разных. В common lispах есть и драйвер через биндинги к libpq, и чуть не два драйвера, написанных напрямую -- и не сказать, что какой-то один более дефолтный чем другой. Единственный известный мне jdbc-драйвер написан полностью на джаве. Добавлено через 53 секунды Ну и да, по сути Вам ужэ ответили (притом на два вопроса). А именно: драйвер нигде не создаёт запрос, а если нужны преобразования в jdbc -- то напишыте обёртку. |