Code Monkey home page Code Monkey logo

sql-to-jdl's Introduction

build StackShare

sql-to-jdl

Tool to translate SQL databases to JDL format of jHipster (Created due to existing databases to be generated with jHipster and build angular-java web)

Usage

#Download
git clone https://github.com/Blackdread/sql-to-jdl.git

# Modify configuration file application.yml at https://github.com/Blackdread/sql-to-jdl/blob/master/src/main/resources/application.yml

#Build, skip the tests for lack of time
mvn clean package -DskipTests

#Run
java -jar target/sql-to-java-*-SNAPSHOT.jar

Direct link to application.yml

Don't forget to install git, maven 3 and java 17 before launching

Compatibility

This implementation works with

  • mysql 5.7.x, 8.x
  • mariadb 10.x
  • postgresql 9.x+
  • oracle 21

Help is requested on MsSQL and Oracle support. This will require implementation of SqlJdlTypeService and creating the raw SQL files. See the MySQL, MariaDB, and PosrgreSQL implemtaitons for examples.

Testing

Setting up tests for new databases types or versions is easy. Have a look existing tests.
MsSQL and Oracle have tests created that are disabled because their implementations are incomplete.

Tests use liquibase so that most of the setup for tests is database agnostic. The main exception is for the all types test that is different for each database type.

Each test needs the following files

  • {{test.name}}-liquibase-changeset.yaml
  • {{test.name}}-expected.jdl

To override the default name the files as

  • {{test.name}}-liquibase-changeset-{{db.typ}}.yaml
  • {{test.name}}-expected-{{db.type}}.jdl

If you need to change the tests run for a specific database type or version, use method hiding by implementing

private static Stream provideTestNames() in the subclass of SqlToJdlTransactionPerTestTest

In order to avoid starting a new database and spring boot container for every test, liquibase is used to roll back the database to an empty state. This can be done by just rolling back the transaction with Spring, but MySQL does not support rollback of DDL changes. This works great with PostgreSQL, but liquibase is used to roll back the changes for all database types currently.

Currently the full test suite runs 11 test per database version which total nearly 80 tests.

Why not use tools like UML provided on jHipster?

  • JDL from web is ok for a few entities but not for more than 100 entities and relations
  • UML software and xml exporters could have worked (other tools on jHipster) but:
    • already many databases in production to be exported in JDL (faster to generate the JDL from it)
    • already working UML design with MySQL Workbench

How to use

Just execute the code from IDE or use "mvn" to run the code, it will connect to your DB (see application config yml) and it will generate the JDL.

Set properties file:

  • Schema name to export
  • Tables names to be ignored
  • Path of export file
  • Database object prefixes to remove from entity name
  • Include table name is JDL
  • Undefined JDL type handling to ERROR, SKIP, or UNSUPPORTED
  • Add JDL type overrides if necessary.

After JDL file is generated

Still have some manual steps to do:

  • review relations:
    • ManyToMany
    • Owner side display field
    • Inverse side field name and display field
    • Bidirectional or not
  • add values to enums
  • review validations of entities

Default specific rules

Table is treated as enum if only 2 columns and both are: "id" AND ("code" OR "name")

Table is treated as ManyToMany if only 2 columns and both are foreign keys

Links

jHipster JDL

An alternative for REST filter and sort

Different criterias, support for JPA and jOOQ dynamic filtering and sorting.

https://github.com/Blackdread/rest-filter

sql-to-jdl's People

Contributors

blackdread avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar duttonw avatar gleb619 avatar krmahadevan avatar linuxidefix avatar mhmmdd avatar murillocg avatar octgsoftware avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sql-to-jdl's Issues

The elements [application.table-to-export] were left unbound

I got this after run mvn

***************************
APPLICATION FAILED TO START
***************************

Description:

 Binding to target [Bindable@e2cfdab type = org.blackdread.sqltojava.config.ApplicationProperties, value = 'none', 
 annotations = array<Annotation> 
 [@org.springframework.boot.context.properties.ConfigurationProperties(ignoreInvalidFields=false, 
 ignoreUnknownFields=false, prefix=application, value=application)]] failed:

    Property: application.table-to-export
    Value: tera
    Origin: URL [file:application.yml] - 2:22
    Reason: The elements [application.table-to-export] were left unbound.

Action:

Update your application's configuration

My application.xml is:

spring:
    datasource:
            type: com.zaxxer.hikari.HikariDataSource
            url: jdbc:mysql://127.0.0.1:3306/?useUnicode=true&characterEncoding=utf8&useSSL=false
            username: root
            password:
            hikari:
                data-source-properties:
                    cachePrepStmts: true
                    prepStmtCacheSize: 250
                    prepStmtCacheSqlLimit: 2048
                    useServerPrepStmts: true
    jooq:
        sql-dialect: mysql


application:
    table-to-export: tera
    ignored-table-names:
        - databasechangelog
        - databasechangeloglock
    export:
        path: ./my-project-jdl.jh
        type: jdl

Error trying to generate JDL with PostgreSQL database configurations

Thank you for using jOOQ 3.11.5

[WARNING] SQL exception : Exception while executing meta query: Cannot execute query. No Connection configured

Please report this bug here: https://github.com/jOOQ/jOOQ/issues/new

select "pg_catalog"."pg_namespace"."nspname"
from "pg_catalog"."pg_namespace"
order by "pg_catalog"."pg_namespace"."nspname"```

[ERROR] Could not load schemata  
org.jooq.exception.DetachedException: Cannot execute query. No Connection configured
	at org.jooq_3.11.5.POSTGRES.debug(Unknown Source)
	at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:319)
	at org.jooq.impl.AbstractResultQuery.fetch(AbstractResultQuery.java:323)
	at org.jooq.impl.AbstractResultQuery.fetch(AbstractResultQuery.java:421)
	at org.jooq.impl.SelectImpl.fetch(SelectImpl.java:2759)
	at org.jooq.meta.postgres.PostgresDatabase.getSchemata0(PostgresDatabase.java:524)
	at org.jooq.meta.AbstractDatabase.getSchemata(AbstractDatabase.java:447)
	at org.jooq.meta.AbstractDatabase.getSchemata(AbstractDatabase.java:474)
	at org.jooq.meta.CatalogDefinition.getSchemata(CatalogDefinition.java:63)
	at org.jooq.codegen.JavaGenerator.generateCatalogIfEmpty(JavaGenerator.java:400)
	at org.jooq.codegen.JavaGenerator.generate(JavaGenerator.java:379)
	at org.jooq.codegen.GenerationTool.run(GenerationTool.java:750)
	at org.jooq.codegen.GenerationTool.generate(GenerationTool.java:220)
	at org.jooq.codegen.maven.Plugin.execute(Plugin.java:197)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
	at org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions(MojoExecutor.java:353)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:198)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
	at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.maven.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:39)
	at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:122)
	at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:50)
[WARNING] No schemata were loaded  : Please check your connection settings, and whether your database (and your database version!) is really supported by jOOQ. Also, check the case-sensitivity in your configured <inputSchema/> elements : null

Table not found or is ignored

Caused by: java.lang.IllegalStateException: Table not found or is ignored
at org.blackdread.sqltojava.service.logic.SqlService.lambda$12(SqlService.java:89) ~[classes/:na]
at java.base/java.util.Optional.orElseThrow(Unknown Source) ~[na:na]
at org.blackdread.sqltojava.service.logic.SqlService.lambda$11(SqlService.java:89) ~[classes/:na]
at java.base/java.util.Optional.map(Unknown Source) ~[na:na]
at org.blackdread.sqltojava.service.logic.SqlService.getTableOfForeignKey(SqlService.java:89) ~[classes/:na]
at org.blackdread.sqltojava.service.logic.SqlService$$FastClassBySpringCGLIB$$701e97dc.invoke() ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:295) ~[spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) ~[spring-tx-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.interceptor.CacheInterceptor.lambda$invoke$0(CacheInterceptor.java:53) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.interceptor.CacheAspectSupport.invokeOperation(CacheAspectSupport.java:365) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:420) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:345) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.blackdread.sqltojava.service.logic.SqlService$$EnhancerBySpringCGLIB$$32257788.getTableOfForeignKey() ~[classes/:na]
at org.blackdread.sqltojava.service.logic.JdlService.buildField(JdlService.java:98) ~[classes/:na]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) ~[na:na]
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source) ~[na:na]
at org.blackdread.sqltojava.service.logic.JdlService.buildEntity(JdlService.java:58) ~[classes/:na]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) ~[na:na]
at java.base/java.util.HashMap$EntrySpliterator.forEachRemaining(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source) ~[na:na]
at org.blackdread.sqltojava.service.logic.JdlService.buildEntities(JdlService.java:49) ~[classes/:na]
at org.blackdread.sqltojava.SqlToJavaApplication.run(SqlToJavaApplication.java:51) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:781) ~[spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
... 10 common frames omitted

Handle reflexive relationships

Currently JDL does not support reflexive relationships that are mandatory in nature.

The corresponding JHipster issue that talks about this jhipster/generator-jhipster#11495

The corresponding documentation from JHipster that elaborates the fix for this https://www.jhipster.tech/jdl/relationships#reflexive-relationships

When we are generating JDLs from a table, we would need to ensure that we dont add the required keyword.

For example a JDL that looks like below when used to generate the code using jhipster import-jdl command generates the below error:

entity Invoices {
	id Integer required,
	name String required maxlength(100),
	address String required maxlength(100)
}

// Relations
relationship OneToOne {
	Invoices{parent required} to Invoices{invoices}
}

// Options
service * with serviceClass
paginate * with pagination
dto * with mapstruct
filter *
INFO! Using JHipster version installed locally in current project's node_modules
INFO! Executing import-jdl example.jdl
INFO! Found .yo-rc.json on path. This is an existing app
INFO! The JDL is being parsed.
Error: Required relationships to the same entity are not supported, for relationship from and to 'Invoices'.
Error while parsing applications and entities from the JDL Error: Required relationships to the same entity are not supported, for relationship from and to 'Invoices'.

The fix is to essentially have sql-to-jdl drop required keyword in the relationship

relationship OneToOne {
	Invoices{parent} to Invoices{invoices} //Notice how we have now dropped required keyword
}

Add support for Oracle

This should only require writing proper native SQL files for 3 queries and a SqlJdlTypeService.

JDL: missing { at empty entities

For entities without fields the left parenthesis does not get generated.

example:
entity JoinAb
}

error: Error message:
NotAllInputParsedException: Redundant input, expecting EOF but found: }
at line: 5857, column: 1
Error during import-jdl: Error: NotAllInputParsedException: Redundant input, expecting EOF but found: }
at line: 5857, column: 1
SyntaxError: Error: NotAllInputParsedException: Redundant input, expecting EOF but found: }
at line: 5857, column: 1

Error in table with ENUM field.

I have a MySQL database with the following table

CREATE TABLE `qp1_integracao` ( `ID` INTEGER(11) NOT NULL AUTO_INCREMENT, `AGE` INTEGER(10) NOT NULL, `ENUMCOLUMN` ENUM('UOL', 'GOOGLE', 'BUSCAPE') NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB;

...when I run the program thows the following Exception

	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784) [spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:765) [spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:319) [spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) [spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
	at org.blackdread.sqltojava.SqlToJavaApplication.main(SqlToJavaApplication.java:45) [classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_171]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.1.8.RELEASE.jar:2.1.8.RELEASE]
Caused by: java.lang.IllegalStateException: An enum field must have its enum entity name set
	at org.blackdread.sqltojava.util.JdlUtils.lambda$writeField$0(JdlUtils.java:115) ~[classes/:na]
	at java.util.Optional.orElseThrow(Optional.java:290) ~[na:1.8.0_171]
	at org.blackdread.sqltojava.util.JdlUtils.writeField(JdlUtils.java:115) ~[classes/:na]
	at org.blackdread.sqltojava.util.JdlUtils.writeEntity(JdlUtils.java:90) ~[classes/:na]
	at org.blackdread.sqltojava.service.logic.ExportService.export(ExportService.java:61) ~[classes/:na]
	at org.blackdread.sqltojava.SqlToJavaApplication.run(SqlToJavaApplication.java:53) [classes/:na]
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:781) [spring-boot-2.1.8.RELEASE.jar:2.1.8.RELEASE]
	... 10 common frames omitted

Do not recognize the ENUM column type ?, or it needs an specific treatment ?

#BUG

I find that the util can't generate forien key.

Missing files

Hi some errors that i get, i could not find the jooq folder in the repo.

import static org.blackdread.sqltojava.jooq.InformationSchema.INFORMATION_SCHEMA;
import static org.blackdread.sqltojava.jooq.tables.KeyColumnUsage.KEY_COLUMN_USAGE;

regards.

Honour the unique attribute for a column

When a column is marked as unique in the table, the generated entity should be having the attribute unique which is currently missing in the generated entity.

For e.g.,

lets say we have a table defined as

CREATE TABLE student
(
    id        INTEGER auto_increment NOT NULL,
    ssnNumber varchar(100)           NOT NULL,
    CONSTRAINT student_un UNIQUE KEY (ssnNumber),
    CONSTRAINT student_pk PRIMARY KEY (id)
)
    ENGINE = InnoDB
    DEFAULT CHARSET = utf8mb4;

The generated entity should have contained the attribute unique for the field ssnNumber which is currently missing.

Fix unsupported char in filename for windows

Using | in file names in windows does not work, cannot clone project or do anything.
3 files has this issue https://github.com/Blackdread/sql-to-jdl/tree/master/src/main/resources/sql:

@octgsoftware I can rename those files via github
I can then change implementation of

/**
 * Loads a sql query file based on the active profile.
 * For multiple profiles to use the same sql files they should be named as follows:
 * sql/{profile1}|{profile1}-{queryName}.sql
 * See mysql|mariadb-queryName.sql for an example.
 * @param activeProfile
 * @param queryName
 * @return
 */
private String readSqlFileByProfile(String activeProfile, String queryName) {

to use __ or other token for splitting profiles.
WDYT?

Add support for best guess for relationship display fields

Displaying the id for select boxes and in columns is currently the Jhipster default behavior.

The majority of my entities have a unique constraint on a single column. Picking a column with the lowest ordinal position and a unique constraint as the display field would take care of the vast majority of my cases.

See JDL Relationship Syntax for how to specify the display field on relationships.

Build Failure

Configured db both in yaml and pom.xml, in pom.xm changed both inputSchema and databaseUrl.

It works if inputSchema is information_schema, but not for any other db.

on

mvn compile

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.401 s
[INFO] Finished at: 2019-07-13T19:38:20-05:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sql-to-java: Compilation failure: Compilation failure:
[ERROR] /tmp/sql-to-jdl/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[6,37] cannot find symbol
[ERROR] symbol: class InformationSchema
[ERROR] location: package org.blackdread.sqltojava.jooq
[ERROR] /tmp/sql-to-jdl/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[19,44] cannot find symbol
[ERROR] symbol: class InformationSchema
[ERROR] location: package org.blackdread.sqltojava.jooq
[ERROR] /tmp/sql-to-jdl/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[19,1] static import only from classes and interfaces
[ERROR] /tmp/sql-to-jdl/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[20,51] cannot find symbol
[ERROR] symbol: class KeyColumnUsage
[ERROR] location: package org.blackdread.sqltojava.jooq.tables
[ERROR] /tmp/sql-to-jdl/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[20,1] static import only from classes and interfaces
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

Still missing files

Hi!
Sorry, after reading the good first issue I still have problem on compiling the project.
I have Postgres instead of MySql so I changed the configuration as follows:

application.yml:

spring:
    datasource:
            type: com.zaxxer.hikari.HikariDataSource
            url: jdbc:postgresql://localhost:5460/subjects_db
            username: subjects_user
            password: password
            hikari:
                data-source-properties:
                    cachePrepStmts: true
                    prepStmtCacheSize: 250
                    prepStmtCacheSqlLimit: 2048
                    useServerPrepStmts: true
    jooq:
        sql-dialect: Postgres

application:
    table-to-export: subjects_data
    ignored-table-names:
        - databasechangelog
        - databasechangeloglock
    export:
        path: ./my-project-jdl.jh
        type: jdl

pom.xml:

<properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <java.version>1.8</java.version>
   <guava.version>27.0-jre</guava.version>
   <skip.jooq.generation>false</skip.jooq.generation>
   <database.url>jdbc:postgresql://localhost:5460/subjects_db</database.url>
</properties>

<dependency>
   <groupId>org.postgresql</groupId>
   <artifactId>postgresql</artifactId>
   <version>42.2.5</version>
</dependency>

<configuration>
   <jdbc>
      <driver>org.postgresql.Driver</driver>
      <url>${database.url}</url>
      <user>subjects_user</user>
      <password>password</password>
   </jdbc>
   <generator>
      <name>org.jooq.codegen.JavaGenerator</name>
      <database>
         <name>org.jooq.meta.postgres.PostgresDatabase</name>
         <includes>.*</includes>
         <excludes></excludes>
         <!--<inputSchema></inputSchema>--> <!-- This will generate all schema of db, better to only generate the one interested in -->
         <inputSchema>subjects_data</inputSchema>
      </database>
      <target>
         <packageName>org.blackdread.sqltojava.jooq</packageName>
         <directory>target/generated-sources/jooq</directory>
      </target>
   </generator>
</configuration>

I have compiled the project first with mvn compile, I have seen the souyrce code generated in the target dir, but I still got:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project sql-to-java: Compilation failure: Compilation failure:
[ERROR] ~/jhipster/sql-to-jdl-master/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[54,38] cannot find symbol
[ERROR] symbol:   variable REFERENCED_TABLE_NAME
[ERROR] location: variable KEY_COLUMN_USAGE of type org.blackdread.sqltojava.jooq.tables.KeyColumnUsage
[ERROR] ~/jhipster/sql-to-jdl-master/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[53,36] cannot find symbol
[ERROR] symbol:   variable REFERENCED_TABLE_SCHEMA
[ERROR] location: variable KEY_COLUMN_USAGE of type org.blackdread.sqltojava.jooq.tables.KeyColumnUsage
[ERROR] ~/jhipster/sql-to-jdl-master/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[50,29] cannot find symbol
[ERROR] symbol:   variable REFERENCED_TABLE_NAME
[ERROR] location: variable KEY_COLUMN_USAGE of type org.blackdread.sqltojava.jooq.tables.KeyColumnUsage
[ERROR] ~/jhipster/sql-to-jdl-master/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[51,29] cannot find symbol
[ERROR] symbol:   variable REFERENCED_COLUMN_NAME
[ERROR] location: variable KEY_COLUMN_USAGE of type org.blackdread.sqltojava.jooq.tables.KeyColumnUsage
[ERROR] ~/jhipster/sql-to-jdl-master/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[78,56] cannot find symbol
[ERROR] symbol:   variable TABLE_COMMENT
[ERROR] location: variable TABLES of type org.blackdread.sqltojava.jooq.tables.Tables
[ERROR] -> [Help 1]

Where is my failure?

TIA,

R

Fix a bug 'relationship name is not synchronized'

When there are 2 relations, many to one, there is an error: The name of the relation is not synchronized.

Postgres example:

CREATE TABLE worker (
	id bigserial NOT NULL,
	"name" varchar NOT NULL,
	details varchar NULL,
	CONSTRAINT worker_pkey PRIMARY KEY (id)
);

CREATE TABLE task (
	id bigserial NOT NULL,
	"name" varchar NOT NULL,
	summary varchar NULL,
	description varchar NULL,
	priority varchar NULL,
	assignee_id int8 NULL,
	author_id int8 NULL,
	status varchar NULL,
	CONSTRAINT task_pkey PRIMARY KEY (id),
	CONSTRAINT task_assignee_id_fkey FOREIGN KEY (assignee_id) REFERENCES worker(id),
	CONSTRAINT task_author_id_fkey FOREIGN KEY (author_id) REFERENCES worker(id)
);

For this ddl, next jdl will be generated:

entity Task(task) {
    name String required maxlength(255),
    summary String maxlength(255),
    description String maxlength(255),
    priority String maxlength(255),
    status String maxlength(255)
}

entity Worker(worker) {
    name String required maxlength(255),
    details String maxlength(255)
}

// Relations
relationship ManyToOne {
    Task{assignee} to Worker{task}
}

relationship ManyToOne {
    Task{author} to Worker{task}
}

As you see, we have two ManyToOne relationship with the same name 'task'

This will lead us to the next jhipster error:

An error occured while running jhipster:entity#prepareRelationshipsForTemplates
Error running generator entities: Error: Error at entity Task: relationship name is not synchronized {                                                                                    
    "otherEntityName": "worker",
    "otherEntityRelationshipName": "task",
    "relationshipName": "author",
    "relationshipType": "many-to-one",
    "otherEntity": "[Worker Entity]",
    "otherEntityField": "id",
    "ownerSide": true,
    "collection": false,
    "otherSideReferenceExists": false,
    "otherEntityIsEmbedded": false
} with {
    "otherEntityName": "task",
    "otherEntityRelationshipName": "assignee",
    "relationshipName": "task",
    "relationshipType": "one-to-many",
    "otherEntity": "[Task Entity]"
}

It is necessary to correct this error. To do this, we need to add to the method JdlService.buildRelation an additional check to create the name

Getting this error when I run sql-to-jdl

java -jar target/sql-to-java-1.0-SNAPSHOT.jar

  .   ____          _            __ _ _   
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \  
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / / 
 =========|_|==============|___/=/_/_/_/  
 :: Spring Boot ::                (v2.7.4)

2023-05-21 14:52:14.530  INFO 23476 --- [           main] o.b.sqltojava.SqlToJavaApplication       : Starting SqlToJavaApplication v1.0-SNAPSHOT using Java 17.0.6 on TKM-KALHMADI with PID 23476 (C:\User
s\k.alahmadi\git\sql-to-jdl\target\sql-to-java-1.0-SNAPSHOT.jar started by K.AlAhmadi in C:\Users\k.alahmadi\git\sql-to-jdl)
2023-05-21 14:52:14.538  INFO 23476 --- [           main] o.b.sqltojava.SqlToJavaApplication       : The following 1 profile is active: "postgresql"
2023-05-21 14:52:16.143  INFO 23476 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChanne
l will be created.
2023-05-21 14:52:16.174  INFO 23476 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default De
faultHeaderChannelRegistry will be created.
2023-05-21 14:52:16.954  INFO 23476 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.integration.config.IntegrationManagementConfiguration' of type [org.springf
ramework.integration.config.IntegrationManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-05-21 14:52:16.994  INFO 23476 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationChannelResolver' of type [org.springframework.integration.support.channel.BeanFactor
yChannelResolver] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-05-21 14:52:17.142  INFO 23476 --- [           main] o.b.s.config.ApplicationProperties       : Loading ApplicationProperties...
2023-05-21 14:52:17.515  INFO 23476 --- [           main] b.s.r.PureSqlInformationSchemaRepository : Using pattern classpath*:/sql/*postgresql*-getAllTableRelationInformation.sql
2023-05-21 14:52:17.523  INFO 23476 --- [           main] b.s.r.PureSqlInformationSchemaRepository : Found resource postgresql-getAllTableRelationInformation.sql
2023-05-21 14:52:17.528  WARN 23476 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework
.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlToJavaApplication': Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframe
work.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlService' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/c
lasses!/org/blackdread/sqltojava/service/logic/SqlService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDepen
dencyException: Error creating bean with name 'informationSchemaService' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/blackdrea
d/sqltojava/service/InformationSchemaService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error 
creating bean with name 'pureSqlInformationSchemaRepository' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/blackdread/sqltojava/
repository/PureSqlInformationSchemaRepository.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.blac
kdread.sqltojava.repository.PureSqlInformationSchemaRepository]: Constructor threw exception; nested exception is java.lang.RuntimeException: java.io.FileNotFoundException: URL [jar:file:/C:/Users/k.ala
hmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql] cannot be resolved to absolute file path because it does not reside in the 
file system: jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql
2023-05-21 14:52:17.559  INFO 23476 --- [           main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-05-21 14:52:17.680 ERROR 23476 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlToJavaApplication': Unsatisfied dependency expressed through constructor parameter 1; nested exception
 is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlService' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPS
HOT.jar!/BOOT-INF/classes!/org/blackdread/sqltojava/service/logic/SqlService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.facto
ry.UnsatisfiedDependencyException: Error creating bean with name 'informationSchemaService' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/cla
sses!/org/blackdread/sqltojava/service/InformationSchemaService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreati
onException: Error creating bean with name 'pureSqlInformationSchemaRepository' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/bl
ackdread/sqltojava/repository/PureSqlInformationSchemaRepository.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to in
stantiate [org.blackdread.sqltojava.repository.PureSqlInformationSchemaRepository]: Constructor threw exception; nested exception is java.lang.RuntimeException: java.io.FileNotFoundException: URL [jar:f
ile:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql] cannot be resolved to absolute file path because it does
 not reside in the file system: jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.23.jar!/:5.3.23]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.23.jar!/:5.3.23]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.4.jar!/:2.7.4]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.4.jar!/:2.7.4]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.4.jar!/:2.7.4]
        at org.blackdread.sqltojava.SqlToJavaApplication.main(SqlToJavaApplication.java:46) ~[classes!/:1.0-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[sql-to-java-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[sql-to-java-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[sql-to-java-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[sql-to-java-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlService' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.
0-SNAPSHOT.jar!/BOOT-INF/classes!/org/blackdread/sqltojava/service/logic/SqlService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.bean
s.factory.UnsatisfiedDependencyException: Error creating bean with name 'informationSchemaService' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-
INF/classes!/org/blackdread/sqltojava/service/InformationSchemaService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.Bea
nCreationException: Error creating bean with name 'pureSqlInformationSchemaRepository' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!
/org/blackdread/sqltojava/repository/PureSqlInformationSchemaRepository.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Faile
d to instantiate [org.blackdread.sqltojava.repository.PureSqlInformationSchemaRepository]: Constructor threw exception; nested exception is java.lang.RuntimeException: java.io.FileNotFoundException: URL
 [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql] cannot be resolved to absolute file path because 
it does not reside in the file system: jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.23.jar!/:5.3.23]
        ... 24 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'informationSchemaService' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/
sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/blackdread/sqltojava/service/InformationSchemaService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is or
g.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pureSqlInformationSchemaRepository' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-
1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/blackdread/sqltojava/repository/PureSqlInformationSchemaRepository.class]: Bean instantiation via constructor failed; nested exception is org.springframework.bean
s.BeanInstantiationException: Failed to instantiate [org.blackdread.sqltojava.repository.PureSqlInformationSchemaRepository]: Constructor threw exception; nested exception is java.lang.RuntimeException:
 java.io.FileNotFoundException: URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql] cannot be reso
lved to absolute file path because it does not reside in the file system: jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRe
lationInformation.sql
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.23.jar!/:5.3.23]
        ... 38 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pureSqlInformationSchemaRepository' defined in URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target
/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/blackdread/sqltojava/repository/PureSqlInformationSchemaRepository.class]: Bean instantiation via constructor failed; nested exception is org.springf
ramework.beans.BeanInstantiationException: Failed to instantiate [org.blackdread.sqltojava.repository.PureSqlInformationSchemaRepository]: Constructor threw exception; nested exception is java.lang.Runt
imeException: java.io.FileNotFoundException: URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql] c
annot be resolved to absolute file path because it does not reside in the file system: jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-
getAllTableRelationInformation.sql
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:315) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:296) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.23.jar!/:5.3.23]
        ... 52 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.blackdread.sqltojava.repository.PureSqlInformationSchemaRepository]: Constructor threw exception; nested excep
tion is java.lang.RuntimeException: java.io.FileNotFoundException: URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRela
tionInformation.sql] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/cl
asses!/sql/postgresql-getAllTableRelationInformation.sql
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:224) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117) ~[spring-beans-5.3.23.jar!/:5.3.23]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:311) ~[spring-beans-5.3.23.jar!/:5.3.23]
        ... 66 common frames omitted
Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableR
elationInformation.sql] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF
/classes!/sql/postgresql-getAllTableRelationInformation.sql
        at org.blackdread.sqltojava.util.ResourceUtil.readString(ResourceUtil.java:23) ~[classes!/:1.0-SNAPSHOT]
        at org.blackdread.sqltojava.repository.PureSqlInformationSchemaRepository.readSqlFileByProfile(PureSqlInformationSchemaRepository.java:82) ~[classes!/:1.0-SNAPSHOT]
        at org.blackdread.sqltojava.repository.PureSqlInformationSchemaRepository.<init>(PureSqlInformationSchemaRepository.java:38) ~[classes!/:1.0-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211) ~[spring-beans-5.3.23.jar!/:5.3.23]
        ... 68 common frames omitted
Caused by: java.io.FileNotFoundException: URL [jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-getAllTableRelationInformation.sql] cann
ot be resolved to absolute file path because it does not reside in the file system: jar:file:/C:/Users/k.alahmadi/git/sql-to-jdl/target/sql-to-java-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/postgresql-get
AllTableRelationInformation.sql
        at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217) ~[spring-core-5.3.23.jar!/:5.3.23]
        at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:164) ~[spring-core-5.3.23.jar!/:5.3.23]
        at org.springframework.core.io.UrlResource.getFile(UrlResource.java:241) ~[spring-core-5.3.23.jar!/:5.3.23]
        at org.blackdread.sqltojava.util.ResourceUtil.readString(ResourceUtil.java:19) ~[classes!/:1.0-SNAPSHOT]
        ... 76 common frames omitted

I need help

Could you explain all the steps to follow with a specific example?

Avoid Using keywords in JDL

Convert MySQL cod to use SQL instead of jOOQ

I don't think this will take much time at all given jOOQ already prints outs out the SQL in the logs. Do you want me to convert the MySqlInformationSchemaRepository?

Also, I would probably convert MySqlJdlTypeService to the way I implemented PostgresJdlTypeService. My technique removes the need for duplicate values because the map will not allow duplicate keys. There is also no need for isTypeContained because this just becomes a simple map lookup.

Also, I write out UNSUPPORTED for an unknown type rather than throwing and error. I could add a application.yml property to control if an error is thrown or UNSUPPORTED is written as the type. A third option to just skip the column also seems like a reasonable idea.

Thoughts?

entity fields returned lower-case

I'm using mysql from xampp, I added 'lower_case_table_names=2' in my.ini file of mysql, set tbale engine to "MyIsam" and when i run the project it still give me lower case fields

No suitable method found for eq(java.lang.String)

hello,

while compiling, i am getting the issue:

[ERROR] PATH/sql-to-jdl-master/src/main/java/org/blackdread/sqltojava/repository/InformationSchemaRepository.java:[53,60] no suitable method found for eq(java.lang.String)
[ERROR]     method org.jooq.Field.eq(byte[]) is not applicable
[ERROR]       (argument mismatch; java.lang.String cannot be converted to byte[])
[ERROR]     method org.jooq.Field.eq(org.jooq.Field<byte[]>) is not applicable
[ERROR]       (argument mismatch; java.lang.String cannot be converted to org.jooq.Field<byte[]>)
[ERROR]     method org.jooq.Field.eq(org.jooq.Select<? extends org.jooq.Record1<byte[]>>) is not applicable
[ERROR]       (argument mismatch; java.lang.String cannot be converted to org.jooq.Select<? extends org.jooq.Record1<byte[]>>)
[ERROR]     method org.jooq.Field.eq(org.jooq.QuantifiedSelect<? extends org.jooq.Record1<byte[]>>) is not applicable
[ERROR]       (argument mismatch; java.lang.String cannot be converted to org.jooq.QuantifiedSelect<? extends org.jooq.Record1<byte[]>>)

all the entities were generated successfully, but it fails only on that and does not generate the .jdl file.

can you help me?

In relation, project generate relation unique key instead primary.

consider sql this SQL

CREATE TABLE cars (
	car_number int(11) NOT NULL,
	model varchar(255) NOT NULL,
        UNIQUE (model),
	PRIMARY KEY (car_number)
);

CREATE TABLE excise (
	chassis_number int(11) NOT NULL,
        vehicle int(11) NOT NULL,
	PRIMARY KEY (chassis_number),
        CONSTRAINT FK_of_excise_with_cars
        FOREIGN KEY (vehicle) REFERENCES cars (car_number)
);

excise table connect with cars table by vehicle and car_number respectively but generated JDL model has connect both entities with Excise.vehical to Cars.model. It should link with car_number instead model see JDL below

entity Cars(cars) {
    carNumber Integer required,
    model String required unique maxlength(255)
}
entity Excise(excise) {
    chassisNumber Integer required
}

relationship ManyToOne {
    Excise{vehicle(model) required} to Cars{excise}
}

why do it always prefer UNIQUE over primary key?

Failed to bind properties under 'application'

I am unable to run the code. Error below.

java -version
openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment Homebrew (build 17.0.9+0)
OpenJDK 64-Bit Server VM Homebrew (build 17.0.9+0, mixed mode, sharing)

mvn -version
Apache Maven 3.9.5 (57804ffe001d7215b5e7bcb531cf83df38f93546)
Maven home: /Users/michaela/Downloads/apache-maven-3.9.5
Java version: 21.0.1, vendor: Homebrew, runtime: /opt/homebrew/Cellar/openjdk/21.0.1/libexec/openjdk.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "14.1", arch: "aarch64", family: "mac"

Error:

Failed to bind properties under 'application' to org.blackdread.sqltojava.config.ApplicationProperties:

Reason: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'application' to org.blackdread.sqltojava.config.ApplicationProperties

Action:

Update your application's configuration

You can get pass this error if fixing the properties to match, but you get into other error after.

I can send a PR fix for these, but need to confirm I am looking at latest, and this used to work before I keep going with fixes. I did few other build and code fixes, to get it this far.

Package org.blackdread.sqltojava.jooq missing

After cloning the repo I tried to run SqlToJavaApplication and got compilation errors in InformationSchemaRepository due to missing classes:

import org.blackdread.sqltojava.jooq.InformationSchema;
import static org.blackdread.sqltojava.jooq.InformationSchema.INFORMATION_SCHEMA;
import static org.blackdread.sqltojava.jooq.tables.KeyColumnUsage.KEY_COLUMN_USAGE;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.