Генерация схемы из метамодели JOOQ в другом SQLDialect

1

Я рассматриваю использование jOOQ как типичного, независимого от диалекта SQL генератора SQL, поскольку мне нужно создать небольшой сценарий DDL базы данных и большое количество INSERT- и UPDATE-операторов "на лету" из большего приложения. Затем мы предоставляем файл в виде загрузки.

Я создал исходную схему БД вручную в MySQL и создал классы jOOQ для работы с ней. В настоящее время JOOQ используется для создания пучка вставок в пустую схему MySql). Это прекрасно работает.

Я хотел бы предложить пользователю выбор различных схем БД для экспорта в: sqlite, MySQL/Maria, Postgres, а если лицензия является коммерческой, то, возможно, Access, Oracle и т.д.

    List<DSLContext> dbdialects = new ArrayList<DSLContext>();
    dbdialects.add(using(SQLDialect.MYSQL));
    dbdialects.add(using(SQLDialect.FIREBIRD));
    dbdialects.add(using(SQLDialect.SQLITE));
    //other dialects including MS Access available via commercial license.

    for (DSLContext create : dbdialects) {

        String dialect = create.configuration().dialect().toString();
        String sql = create.insertInto(EMPLOYEES)
                .set(EMPLOYEES.FIRST_NAME, fn)
                .set(EMPLOYEES.LAST_NAME, ln)
                .getSQL(ParamType.INLINED);
        System.out.println(dialect + "\t" + sql);
    }

Конечно, я могу воссоздать базовую схему вручную для каждой RDBMS, но это утомительно, подвержено ошибкам и кажется излишним: нет ли разумного способа использовать сгенерированную метамодель из jOOQ, которую я создал с моей схемой DB DB для генерации схема для других диалектов SQL?

Теги:
database
jooq
ddl
dialect

1 ответ

0
Лучший ответ

Эта функциональность была доступна через методы DSLContext.ddl(), которые были добавлены в jOOQ 3.8 с # 3160.

Чтобы генерировать и выполнять DDL-запросы (CREATE TABLE, ALTER TABLE ADD CONSTRAINT и т.д.), Просто передайте имя таблицы или имени схемы в метод ddl() следующим образом:

Queries queries = DSL.using(configuration).ddl(EMPLOYEES);
for (Query query : queries)
    query.execute();
  • 0
    Спасибо за отзыв - обязательно оставим эти рамки на нашем радаре!
  • 0
    @ Sprockets: Отлично! Я хотел бы узнать больше о вашем интересном сценарии использования. Если вы хотите быстро пообщаться, свяжитесь с нами.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню