mirror of
https://github.com/vran-dev/databasir.git
synced 2025-10-29 11:29:19 +08:00
feature: support foreign keys (#50)
* feat: support resolve foreign key * feat: generate document foreignkey jooq model * feat: support foreign keys * feat:update frontend resources * fix: checkstyle
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package com.databasir.dao.impl;
|
||||
|
||||
import com.databasir.dao.tables.pojos.TableForeignKeyDocumentPojo;
|
||||
import lombok.Getter;
|
||||
import org.jooq.DSLContext;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static com.databasir.dao.Tables.TABLE_FOREIGN_KEY_DOCUMENT;
|
||||
|
||||
@Repository
|
||||
public class TableForeignKeyDocumentDao extends BaseDao<TableForeignKeyDocumentPojo> {
|
||||
|
||||
@Autowired
|
||||
@Getter
|
||||
private DSLContext dslContext;
|
||||
|
||||
public TableForeignKeyDocumentDao() {
|
||||
super(TABLE_FOREIGN_KEY_DOCUMENT, TableForeignKeyDocumentPojo.class);
|
||||
}
|
||||
|
||||
public List<TableForeignKeyDocumentPojo> selectByDatabaseDocumentId(Integer databaseDocumentId) {
|
||||
return getDslContext()
|
||||
.selectFrom(TABLE_FOREIGN_KEY_DOCUMENT)
|
||||
.where(TABLE_FOREIGN_KEY_DOCUMENT.DATABASE_DOCUMENT_ID.eq(databaseDocumentId))
|
||||
.fetchInto(TableForeignKeyDocumentPojo.class);
|
||||
}
|
||||
|
||||
public List<TableForeignKeyDocumentPojo> selectByDatabaseDocumentIdAndTableIdIn(Integer databaseDocumentId,
|
||||
List<Integer> tableIdIn) {
|
||||
if (tableIdIn == null || tableIdIn.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return getDslContext()
|
||||
.selectFrom(TABLE_FOREIGN_KEY_DOCUMENT)
|
||||
.where(TABLE_FOREIGN_KEY_DOCUMENT.DATABASE_DOCUMENT_ID.eq(databaseDocumentId)
|
||||
.and(TABLE_FOREIGN_KEY_DOCUMENT.TABLE_DOCUMENT_ID.in(tableIdIn)))
|
||||
.fetchInto(TableForeignKeyDocumentPojo.class);
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
CREATE TABLE IF NOT EXISTS database_type
|
||||
(
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
database_type VARCHAR(128) NOT NULL COMMENT 'such as mysql, postgresql, mysql5.5 and so on',
|
||||
icon VARCHAR(512) NOT NULL DEFAULT '',
|
||||
description VARCHAR(512) NOT NULL,
|
||||
jdbc_driver_file_url VARCHAR(1024) NOT NULL,
|
||||
jdbc_driver_class_name VARCHAR(255) NOT NULL,
|
||||
jdbc_protocol VARCHAR(128) NOT NULL,
|
||||
url_pattern VARCHAR(255) NOT NULL,
|
||||
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
deleted_token INT NOT NULL DEFAULT 0,
|
||||
update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT uk_database_type_deleted_deleted_token UNIQUE (database_type, deleted, deleted_token)
|
||||
) CHARSET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci COMMENT 'customer database types';
|
||||
|
||||
REPLACE INTO databasir.database_type (id, database_type, icon, DESCRIPTION, jdbc_driver_file_url,
|
||||
jdbc_driver_class_name,
|
||||
jdbc_protocol, url_pattern)
|
||||
VALUES (1, 'mysql', '', 'system default mysql', 'N/A', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql',
|
||||
'{{jdbc.protocol}}://{{db.url}}/{{db.name}}'),
|
||||
(2, 'postgresql', '', 'system default postgresql', 'N/A', 'org.postgresql.Driver', 'jdbc:postgresql',
|
||||
'{{jdbc.protocol}}://{{db.url}}/{{db.name}}');
|
||||
|
||||
CREATE TABLE IF NOT EXISTS document_description
|
||||
(
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
content TEXT NOT NULL,
|
||||
project_id INT NOT NULL,
|
||||
table_name VARCHAR(255) NOT NULL,
|
||||
column_name VARCHAR(255) DEFAULT NULL,
|
||||
update_by INT NOT NULL,
|
||||
update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT UNIQUE uk_project_id_table_name_column_name (project_id, table_name, column_name)
|
||||
) CHARSET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci COMMENT 'custom document description';
|
||||
@@ -166,6 +166,25 @@ CREATE TABLE IF NOT EXISTS table_column_document
|
||||
) CHARSET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS table_foreign_key_document
|
||||
(
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
table_document_id INT NOT NULL,
|
||||
database_document_id INT NOT NULL,
|
||||
fk_name VARCHAR(255) DEFAULT NULL,
|
||||
fk_table_name VARCHAR(512) NOT NULL,
|
||||
fk_column_name VARCHAR(512) NOT NULL,
|
||||
pk_name VARCHAR(255) DEFAULT NULL,
|
||||
pk_table_name VARCHAR(512) NOT NULL,
|
||||
pk_column_name VARCHAR(512) NOT NULL,
|
||||
update_rule VARCHAR(128) NOT NULL COMMENT 'NO_ACTION, CASCADE, SET_NULL, SET_DEFAULT',
|
||||
delete_rule VARCHAR(128) NOT NULL COMMENT 'NO_ACTION, CASCADE, SET_NULL, SET_DEFAULT',
|
||||
create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_table_document_id (table_document_id),
|
||||
INDEX idx_database_document_id (database_document_id)
|
||||
) CHARSET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS table_index_document
|
||||
(
|
||||
|
||||
@@ -270,3 +289,43 @@ CREATE TABLE IF NOT EXISTS oauth_app
|
||||
UNIQUE uk_registration_id (registration_id)
|
||||
) CHARSET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci COMMENT 'oauth app info';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS database_type
|
||||
(
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
database_type VARCHAR(128) NOT NULL COMMENT 'such as mysql, postgresql, mysql5.5 and so on',
|
||||
icon VARCHAR(512) NOT NULL DEFAULT '',
|
||||
description VARCHAR(512) NOT NULL,
|
||||
jdbc_driver_file_url VARCHAR(1024) NOT NULL,
|
||||
jdbc_driver_class_name VARCHAR(255) NOT NULL,
|
||||
jdbc_protocol VARCHAR(128) NOT NULL,
|
||||
url_pattern VARCHAR(255) NOT NULL,
|
||||
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
deleted_token INT NOT NULL DEFAULT 0,
|
||||
update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT uk_database_type_deleted_deleted_token UNIQUE (database_type, deleted, deleted_token)
|
||||
) CHARSET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci COMMENT 'customer database types';
|
||||
|
||||
REPLACE INTO databasir.database_type (id, database_type, icon, DESCRIPTION, jdbc_driver_file_url,
|
||||
jdbc_driver_class_name,
|
||||
jdbc_protocol, url_pattern)
|
||||
VALUES (1, 'mysql', '', 'system default mysql', 'N/A', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql',
|
||||
'{{jdbc.protocol}}://{{db.url}}/{{db.name}}'),
|
||||
(2, 'postgresql', '', 'system default postgresql', 'N/A', 'org.postgresql.Driver', 'jdbc:postgresql',
|
||||
'{{jdbc.protocol}}://{{db.url}}/{{db.name}}');
|
||||
|
||||
CREATE TABLE IF NOT EXISTS document_description
|
||||
(
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
content TEXT NOT NULL,
|
||||
project_id INT NOT NULL,
|
||||
table_name VARCHAR(255) NOT NULL,
|
||||
column_name VARCHAR(255) DEFAULT NULL,
|
||||
update_by INT NOT NULL,
|
||||
update_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT UNIQUE uk_project_id_table_name_column_name (project_id, table_name, column_name)
|
||||
) CHARSET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci COMMENT 'custom document description';
|
||||
Reference in New Issue
Block a user