Information_schema не генерируется из jooq для SQL Server - PullRequest
2 голосов
/ 20 июня 2019

Я использую Jooq Trial для генерации кода из базы данных SQL Server в качестве документа.Я использую ниже конфигурации.Однако во время компиляции информационная схема не генерируется.

            <plugin>

                <groupId>org.jooq.trial</groupId>
                <artifactId>jooq-codegen-maven</artifactId>
                <version>${jooq.version}</version>

                <executions>
                    <execution>
                        <id>jooq-codegen</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <skip>${skip.jooq.generation}</skip>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <jdbc>
                        <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
                        <url>${database.url}</url>
                        <user></user>
                        <password></password>
                    </jdbc>
                    <generator>
                        <name>org.jooq.codegen.JavaGenerator</name>
                        <database>
                            <name>org.jooq.meta.sqlserver.SQLServerDatabase</name>
                            <includes>.*</includes>
                            <excludes></excludes>
                            <!--<inputSchema></inputSchema> --> <!-- This will generate all schema of db, better to only generate the one 
                                interested in -->
                            <inputCatalog>scm</inputCatalog>
                            <schemata>
                                <schema>
                                    <inputSchema>dbo</inputSchema>
                                </schema>
                                <schema>
                                    <inputSchema>INFORMATION_SCHEMA</inputSchema>
                                </schema>
                            </schemata>
                        </database>
                        <target>
                            <packageName>org.blackdread.sqltojava.jooq</packageName>
                            <directory>target/generated-sources/jooq</directory>
                        </target>
                    </generator>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.jooq.trial</groupId>
                        <artifactId>jooq-meta</artifactId>
                        <version>${jooq.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.jooq.trial</groupId>
                        <artifactId>jooq-codegen</artifactId>
                        <version>${jooq.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.jooq.trial</groupId>
                        <artifactId>jooq</artifactId>
                        <version>${jooq.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

Журнал:

[INFO] Генерация завершена: scm.dbo: Всего: 1,493 с, + 0,333 мс[INFO]
[INFO] Исключая пустую схему: scm.INFORMATION_SCHEMA [INFO] Удаление лишних файлов

Но information_schema доступна в виде представлений, и она также возвращает мне необходимую информацию.Я использую проверку подлинности Windows, а не SA.

1 Ответ

1 голос
/ 20 июня 2019

По историческим причинам jOOQ-meta SQLServerDatabase запрашивает только таблицу sys.objects, а не таблицу sys.all_objects, чтобы выполнить обратный инжиниринг вашей базы данных.Это должно быть изменено, конечно.Я создал запрос функции для этого: https://github.com/jOOQ/jOOQ/issues/8827

Это было реализовано для jOOQ 3.12

Обходной путь

Тем временем у вас есть следующие опции:

  • Расширьте SQLServerDatabase, чтобы адаптировать его запросы для извлечения из all_objects, а не из objects (с профессиональной версией это намного проще, чем с бесплатной пробной версией, так как вы получите источникии право на исправление исходного кода)
  • Вместо этого используйте JDBCDatabase, который запрашивает JDBC DatabaseMetaData.Это также должно возвращать содержимое из схем sys и INFORMATION_SCHEMA (но в настоящее время не предоставляет доступа, например, к хранимым процедурам)
  • Использовать сгенерированные таблицы INFORMATION_SCHEMA, расположенные в модуле jOOQ-meta
...