/**
* Copyright (c) 2011-2020, hubin (jobob@qq.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.baomidou.mybatisplus.generator.config.rules;
/**
* <p>
* 表数据查询
* </p>
*
* @author hubin, tangguo
* @since 2016-04-25
*/
public enum QuerySQL {
MYSQL("mysql", "show tables", "show table status", "show full fields from %s", "NAME", "COMMENT", "FIELD", "TYPE",
"COMMENT", "KEY"),
ORACLE("oracle", "SELECT * FROM USER_TABLES", "SELECT * FROM USER_TAB_COMMENTS",
"SELECT A.COLUMN_NAME, CASE WHEN A.DATA_TYPE='NUMBER' THEN "
+ "(CASE WHEN A.DATA_PRECISION IS NULL THEN A.DATA_TYPE "
+ "WHEN NVL(A.DATA_SCALE, 0) > 0 THEN A.DATA_TYPE||'('||A.DATA_PRECISION||','||A.DATA_SCALE||')' "
+ "ELSE A.DATA_TYPE||'('||A.DATA_PRECISION||')' END) "
+ "ELSE A.DATA_TYPE END DATA_TYPE, B.COMMENTS,DECODE(C.POSITION, '1', 'PRI') KEY "
+ "FROM USER_TAB_COLUMNS A INNER JOIN USER_COL_COMMENTS B ON A.TABLE_NAME = B.TABLE_NAME"
+ " AND A.COLUMN_NAME = B.COLUMN_NAME LEFT JOIN USER_CONSTRAINTS D "
+ "ON D.TABLE_NAME = A.TABLE_NAME AND D.CONSTRAINT_TYPE = 'P' "
+ "LEFT JOIN USER_CONS_COLUMNS C ON C.CONSTRAINT_NAME = D.CONSTRAINT_NAME "
+ "AND C.COLUMN_NAME=A.COLUMN_NAME WHERE A.TABLE_NAME = '%s' ",
"TABLE_NAME", "COMMENTS", "COLUMN_NAME", "DATA_TYPE", "COMMENTS", "KEY"),
SQL_SERVER("sql_server",
"select cast(name as varchar(500)) as TABLE_NAME from sysObjects where xtype='U' order by name",
"select name as TABLE_NAME,(select cast(value as varchar(500)) from sys.extended_properties where major_id=id and minor_id = 0) as COMMENTS from sysobjects where xtype='U'",
"SELECT cast(a.NAME AS VARCHAR(500)) AS TABLE_NAME,cast(b.NAME AS VARCHAR(500)) AS COLUMN_NAME, "
+ "cast(c.VALUE AS VARCHAR(500)) AS COMMENTS,cast(sys.types.NAME AS VARCHAR (500)) AS DATA_TYPE,"
+ "(" + " SELECT CASE count(1) WHEN 1 then 'PRI' ELSE '' END"
+ " FROM syscolumns,sysobjects,sysindexes,sysindexkeys,systypes "
+ " WHERE syscolumns.xusertype = systypes.xusertype AND syscolumns.id = object_id (A.NAME) AND sysobjects.xtype = 'PK'"
+ " AND sysobjects.parent_obj = syscolumns.id " + " AND sysindexes.id = syscolumns.id "
+ " AND sysobjects.NAME = sysindexes.NAME AND sysindexkeys.id = syscolumns.id "
+ " AND sysindexkeys.indid = sysindexes.indid "
+ " AND syscolumns.colid = sysindexkeys.colid AND syscolumns.NAME = B.NAME) as 'KEY'"
+ " FROM sys.TABLES a " + " INNER JOIN sys.COLUMNS b ON b.object_id = a.object_id "
+ " LEFT JOIN sys.types ON b.user_type_id = sys.types.user_type_id "
+ " LEFT JOIN sys.extended_properties c ON c.major_id = b.object_id AND c.minor_id = b.column_id "
+ " WHERE a.NAME = '%s' and sys.types.NAME !='sysname' ",
"TABLE_NAME", "COMMENTS", "COLUMN_NAME", "DATA_TYPE", "COMMENTS", "KEY"),
POSTGRE_SQL("postgre_sql", "select tablename from pg_tables where schemaname='public' ORDER BY tablename",
"SELECT A.tablename, obj_description(relfilenode, 'pg_class') AS comments FROM pg_tables A, pg_class B WHERE A.schemaname='public' AND A.tablename = B.relname",
"SELECT DISTINCT A.attname AS name,format_type(A.atttypid,A.atttypmod) AS type,col_description(A.attrelid,A.attnum) AS comment,(CASE C.contype WHEN 'p' THEN 'PRI' ELSE '' END) AS key"
+ " FROM pg_attribute A INNER JOIN pg_class B ON A.attrelid = B.oid"
+ " LEFT JOIN pg_constraint C ON A.attnum = C.conkey[1] WHERE B.relname = '%s' AND A.attnum>0",
"tablename", "comments", "name", "type", "comment", "key");
private final String dbType;
private final String tablesSql;
private final String tableCommentsSql;
private final String tableFieldsSql;
private final String tableName;
private final String tableComment;
private final String fieldName;
private final String fieldType;
private final String fieldComment;
private final String fieldKey;
QuerySQL(final String dbType, final String tablesSql, final String tableCommentsSql, final String tableFieldsSql,
final String tableName, final String tableComment, final String fieldName, final String fieldType,
final String fieldComment, final String fieldKey) {
this.dbType = dbType;
this.tablesSql = tablesSql;
this.tableCommentsSql = tableCommentsSql;
this.tableFieldsSql = tableFieldsSql;
this.tableName = tableName;
this.tableComment = tableComment;
this.fieldName = fieldName;
this.fieldType = fieldType;
this.fieldComment = fieldComment;
this.fieldKey = fieldKey;
}
public String getDbType() {
return dbType;
}
public String getTablesSql() {
return tablesSql;
}
public String getTableCommentsSql() {
return tableCommentsSql;
}
public String getTableFieldsSql() {
return tableFieldsSql;
}
public String getTableName() {
return tableName;
}
public String getTableComment() {
return tableComment;
}
public String getFieldName() {
return fieldName;
}
public String getFieldType() {
return fieldType;
}
public String getFieldComment() {
return fieldComment;
}
public String getFieldKey() {
return fieldKey;
}
}