新增: 读取全部表信息

master
曹世达 6 months ago
parent 17011d5d0b
commit 53a1bf0556

@ -26,6 +26,12 @@
<artifactId>logback-classic</artifactId> <artifactId>logback-classic</artifactId>
<version>1.4.14</version> <version>1.4.14</version>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.48</version>
</dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId> <artifactId>junit-jupiter</artifactId>

@ -3,10 +3,11 @@ package space.caoshd.otone.builder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import space.caoshd.otone.entity.ColumnInfo; import space.caoshd.otone.entity.ColumnInfo;
import space.caoshd.otone.extension.ColumnAddonAble;
import space.caoshd.otone.tool.PropertyTools; import space.caoshd.otone.tool.PropertyTools;
import space.caoshd.otone.util.ConfigConsts;
import space.caoshd.otone.util.DataTypeUtils; import space.caoshd.otone.util.DataTypeUtils;
import space.caoshd.otone.util.DatabaseUtils; import space.caoshd.otone.util.DatabaseUtils;
import space.caoshd.otone.util.JsonUtils;
import space.caoshd.otone.util.PropertiesConsts; import space.caoshd.otone.util.PropertiesConsts;
import space.caoshd.otone.util.SqlConsts; import space.caoshd.otone.util.SqlConsts;
import space.caoshd.otone.util.StringUtils; import space.caoshd.otone.util.StringUtils;
@ -16,29 +17,42 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class FieldBuilder { public class ColumnBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(TableBuilder.class);
private static final Logger LOGGER = LoggerFactory.getLogger(ColumnBuilder.class);
private static final PropertyTools sqlProperties = private static final PropertyTools sqlProperties =
new PropertyTools(PropertiesConsts.MYSQL_PROPERTIES_PATH); new PropertyTools(PropertiesConsts.MYSQL_PROPERTIES_PATH);
private static final PropertyTools configProperties = private final String schemaName;
new PropertyTools(PropertiesConsts.CONFIG_PROPERTIES_PATH); private final String tableName;
public ColumnBuilder(String schemaName, String tableName) {
this.schemaName = schemaName;
this.tableName = tableName;
}
public static List<ColumnInfo> loadFieldInfo(String schemaName, String tableName) { private final List<ColumnAddonAble> columnAddonAbles = new ArrayList<>();
public ColumnBuilder addColumnAddonAble(ColumnAddonAble columnAddonAble) {
this.columnAddonAbles.add(columnAddonAble);
return this;
}
public List<ColumnInfo> build() {
String sql = sqlProperties.getString(SqlConsts.COLUMN_SQL_SCHEMA_TABLE); String sql = sqlProperties.getString(SqlConsts.COLUMN_SQL_SCHEMA_TABLE);
List<String> params = Arrays.asList(schemaName, tableName); List<String> params = Arrays.asList(schemaName, tableName);
List<Map<String, String>> columns = DatabaseUtils.list(sql, params); List<Map<String, String>> columns = DatabaseUtils.list(sql, params);
List<ColumnInfo> result = new ArrayList<>(); List<ColumnInfo> result = new ArrayList<>();
for (Map<String, String> field : columns) { for (Map<String, String> column : columns) {
result.add(createFiledInfo(field)); result.add(createColumnInfo(column));
} }
return result; return result;
} }
private static ColumnInfo createFiledInfo(Map<String, String> column) { private ColumnInfo createColumnInfo(Map<String, String> column) {
ColumnInfo result = new ColumnInfo(); ColumnInfo result = new ColumnInfo();
String columnComment = sqlProperties.getString(SqlConsts.LABEL_COLUMN_COMMENT); String columnComment = sqlProperties.getString(SqlConsts.LABEL_COLUMN_COMMENT);
result.setComment(column.get(columnComment)); result.setComment(column.get(columnComment));
@ -52,6 +66,12 @@ public class FieldBuilder {
result.setJavaDataType(javaDataType); result.setJavaDataType(javaDataType);
String extra = sqlProperties.getString(SqlConsts.LABEL_EXTRA); String extra = sqlProperties.getString(SqlConsts.LABEL_EXTRA);
result.setAutoIncrement(column.get(extra).contains(SqlConsts.VALUE_AUTO_INCREMENT)); result.setAutoIncrement(column.get(extra).contains(SqlConsts.VALUE_AUTO_INCREMENT));
for (ColumnAddonAble columnAddonAble : columnAddonAbles) {
columnAddonAble.addon(result, result.getAddonInfo());
}
LOGGER.debug(JsonUtils.toJson(result));
return result; return result;
} }

@ -0,0 +1,52 @@
package space.caoshd.otone.builder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.caoshd.otone.entity.IndexInfo;
import space.caoshd.otone.tool.PropertyTools;
import space.caoshd.otone.util.DatabaseUtils;
import space.caoshd.otone.util.JsonUtils;
import space.caoshd.otone.util.PropertiesConsts;
import space.caoshd.otone.util.SqlConsts;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class IndexBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(IndexBuilder.class);
private static final PropertyTools sqlProperties =
new PropertyTools(PropertiesConsts.MYSQL_PROPERTIES_PATH);
public static List<IndexInfo> loadIndexInfo(String schemaName, String tableName) {
String sql = sqlProperties.getString(SqlConsts.INDEX_SQL_SCHEMA_TABLE);
List<String> params = Arrays.asList(schemaName, tableName);
List<Map<String, String>> indexes = DatabaseUtils.list(sql, params);
List<IndexInfo> result = new ArrayList<>();
for (Map<String, String> index : indexes) {
result.add(createIndexInfo(index));
}
return result;
}
private static IndexInfo createIndexInfo(Map<String, String> index) {
IndexInfo result = new IndexInfo();
String columnName = sqlProperties.getString(SqlConsts.LABEL_COLUMN_NAME);
result.setColumnName(index.get(columnName));
String indexName = sqlProperties.getString(SqlConsts.LABEL_INDEX_NAME);
result.setIndexName(index.get(indexName));
String nonUnique = sqlProperties.getString(SqlConsts.LABEL_NON_UNIQUE);
result.setNonUnique(index.get(nonUnique));
LOGGER.debug(JsonUtils.toJson(result));
return result;
}
}

@ -2,10 +2,16 @@ package space.caoshd.otone.builder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import space.caoshd.otone.entity.ColumnInfo;
import space.caoshd.otone.entity.IndexInfo;
import space.caoshd.otone.entity.TableInfo; import space.caoshd.otone.entity.TableInfo;
import space.caoshd.otone.extension.ColumnAddonAble;
import space.caoshd.otone.extension.TableAddonAble;
import space.caoshd.otone.tool.PropertyTools; import space.caoshd.otone.tool.PropertyTools;
import space.caoshd.otone.util.ConfigConsts; import space.caoshd.otone.util.ConfigConsts;
import space.caoshd.otone.util.DataTypeUtils;
import space.caoshd.otone.util.DatabaseUtils; import space.caoshd.otone.util.DatabaseUtils;
import space.caoshd.otone.util.JsonUtils;
import space.caoshd.otone.util.PropertiesConsts; import space.caoshd.otone.util.PropertiesConsts;
import space.caoshd.otone.util.SqlConsts; import space.caoshd.otone.util.SqlConsts;
import space.caoshd.otone.util.StringUtils; import space.caoshd.otone.util.StringUtils;
@ -13,10 +19,12 @@ import space.caoshd.otone.util.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
public class TableBuilder { public class TableBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(TableBuilder.class); private static final Logger LOGGER = LoggerFactory.getLogger(TableBuilder.class);
@ -27,7 +35,21 @@ public class TableBuilder {
private static final PropertyTools configProperties = private static final PropertyTools configProperties =
new PropertyTools(PropertiesConsts.CONFIG_PROPERTIES_PATH); new PropertyTools(PropertiesConsts.CONFIG_PROPERTIES_PATH);
public static List<TableInfo> loadTableInfo() { private final List<TableAddonAble> tableAddonAbles = new ArrayList<>();
public TableBuilder addTableAddonAble(TableAddonAble tableAddonAble) {
this.tableAddonAbles.add(tableAddonAble);
return this;
}
private final List<ColumnAddonAble> columnAddonAbles = new ArrayList<>();
public TableBuilder addColumnAddonAble(ColumnAddonAble columnAddonAble) {
this.columnAddonAbles.add(columnAddonAble);
return this;
}
public List<TableInfo> build() {
List<TableInfo> result = new ArrayList<>(); List<TableInfo> result = new ArrayList<>();
List<String> schemaNames = configProperties.getStrings(ConfigConsts.SCHEMA_NAMES); List<String> schemaNames = configProperties.getStrings(ConfigConsts.SCHEMA_NAMES);
if (schemaNames.isEmpty()) { if (schemaNames.isEmpty()) {
@ -38,14 +60,14 @@ public class TableBuilder {
} }
} else { } else {
for (String schemaName : schemaNames) { for (String schemaName : schemaNames) {
result.addAll(loadTableInfo(schemaName)); result.addAll(build(schemaName));
} }
} }
System.out.println(result);
return result; return result;
} }
public static List<TableInfo> loadTableInfo(String schemaName) { public List<TableInfo> build(String schemaName) {
List<TableInfo> result = new ArrayList<>(); List<TableInfo> result = new ArrayList<>();
List<String> tableNames = configProperties.getStrings(ConfigConsts.TABLE_NAMES); List<String> tableNames = configProperties.getStrings(ConfigConsts.TABLE_NAMES);
if (tableNames.isEmpty()) { if (tableNames.isEmpty()) {
@ -57,7 +79,7 @@ public class TableBuilder {
} }
} else { } else {
for (String tableName : tableNames) { for (String tableName : tableNames) {
TableInfo tableInfo = loadTableInfo(schemaName, tableName); TableInfo tableInfo = build(schemaName, tableName);
if (Objects.nonNull(tableInfo)) { if (Objects.nonNull(tableInfo)) {
result.add(tableInfo); result.add(tableInfo);
} }
@ -66,7 +88,7 @@ public class TableBuilder {
return result; return result;
} }
public static TableInfo loadTableInfo(String schemaName, String tableName) { public TableInfo build(String schemaName, String tableName) {
String sql = sqlProperties.getString(SqlConsts.TABLE_SQL_SCHEMA_TABLE); String sql = sqlProperties.getString(SqlConsts.TABLE_SQL_SCHEMA_TABLE);
List<String> params = Arrays.asList(schemaName, tableName); List<String> params = Arrays.asList(schemaName, tableName);
Map<String, String> table = DatabaseUtils.one(sql, params); Map<String, String> table = DatabaseUtils.one(sql, params);
@ -77,17 +99,20 @@ public class TableBuilder {
return createTableInfo(table); return createTableInfo(table);
} }
private static TableInfo createTableInfo(Map<String, String> table) { private TableInfo createTableInfo(Map<String, String> table) {
TableInfo result = new TableInfo(); TableInfo result = new TableInfo();
String tableSchema = sqlProperties.getString(SqlConsts.LABEL_TABLE_SCHEMA); String tableSchemaLabel = sqlProperties.getString(SqlConsts.LABEL_TABLE_SCHEMA);
result.setTableSchema(table.get(tableSchema)); String tableSchema = table.get(tableSchemaLabel);
result.setTableSchema(tableSchema);
String tableComment = sqlProperties.getString(SqlConsts.LABEL_TABLE_COMMENT); String tableCommentLabel = sqlProperties.getString(SqlConsts.LABEL_TABLE_COMMENT);
result.setComment(table.get(tableComment)); String comment = table.get(tableCommentLabel);
result.setComment(comment);
String tableName = sqlProperties.getString(SqlConsts.LABEL_TABLE_NAME); String tableNameLabel = sqlProperties.getString(SqlConsts.LABEL_TABLE_NAME);
result.setTableName(table.get(tableName)); String tableName = table.get(tableNameLabel);
result.setTableName(tableName);
String tableNameWithoutPrefix = getTableNameWithoutPrefix(result.getTableName()); String tableNameWithoutPrefix = getTableNameWithoutPrefix(result.getTableName());
String beanName = StringUtils.toCamelCase(tableNameWithoutPrefix, true); String beanName = StringUtils.toCamelCase(tableNameWithoutPrefix, true);
@ -98,16 +123,60 @@ public class TableBuilder {
ConfigConsts.VALUE_BEAN_SUFFIX ConfigConsts.VALUE_BEAN_SUFFIX
); );
result.setQueryBeanName(beanName + suffix); result.setQueryBeanName(beanName + suffix);
List<ColumnInfo> columnInfo = loadColumnInfo(tableSchema, tableName);
result.setColumnInfo(columnInfo);
result.setFieldInfoList(FieldBuilder.loadFieldInfo( result.setDateExists(columnInfo.stream()
.anyMatch(column -> DataTypeUtils.JAVA_TYPE_DATE.equals(column.getJavaDataType())));
result.setDecimalExists(columnInfo.stream()
.anyMatch(column -> DataTypeUtils.JAVA_TYPE_DECIMAL.equals(column.getJavaDataType())));
List<IndexInfo> indexInfoList = IndexBuilder.loadIndexInfo(
result.getTableSchema(), result.getTableSchema(),
result.getTableName() result.getTableName()
)); );
Map<String, List<ColumnInfo>> indexInfo = new HashMap<>();
indexInfoList.forEach(index -> {
List<ColumnInfo> indexColumnInfoList = indexInfo.computeIfAbsent(
index.getIndexName(),
k -> new ArrayList<>()
);
ColumnInfo columnInfoByColumnName = getColumnInfoByColumnName(
columnInfo,
index.getColumnName()
);
indexColumnInfoList.add(columnInfoByColumnName);
});
result.setIndexInfo(indexInfo);
for (TableAddonAble tableAddonAble : tableAddonAbles) {
tableAddonAble.addon(result, result.getAddonInfo());
}
LOGGER.debug(JsonUtils.toJson(result));
return result; return result;
} }
private static String getTableNameWithoutPrefix(String tableNameWithoutPrefix) { private List<ColumnInfo> loadColumnInfo(String tableSchema, String tableName) {
ColumnBuilder columnBuilder = new ColumnBuilder(tableSchema, tableName);
for (ColumnAddonAble columnAddonAble : columnAddonAbles) {
columnBuilder.addColumnAddonAble(columnAddonAble);
}
return columnBuilder.build();
}
private ColumnInfo getColumnInfoByColumnName(
List<ColumnInfo> columnInfoList, String columnName
) {
return columnInfoList.stream()
.filter(x -> columnName.equals(x.getColumnName()))
.findFirst()
.orElseThrow(() -> new RuntimeException("column: " + columnName + " not exists."));
}
private String getTableNameWithoutPrefix(String tableNameWithoutPrefix) {
List<String> tablePrefixes = configProperties.getStrings(ConfigConsts.TABLE_PREFIXIES); List<String> tablePrefixes = configProperties.getStrings(ConfigConsts.TABLE_PREFIXIES);
for (String tablePrefix : tablePrefixes) { for (String tablePrefix : tablePrefixes) {

@ -1,5 +1,8 @@
package space.caoshd.otone.entity; package space.caoshd.otone.entity;
import java.util.HashMap;
import java.util.Map;
public class ColumnInfo { public class ColumnInfo {
private String columnName; private String columnName;
@ -14,6 +17,8 @@ public class ColumnInfo {
private Boolean autoIncrement; private Boolean autoIncrement;
private final Map<String, Object> addonInfo = new HashMap<>();
public String getColumnName() { public String getColumnName() {
return columnName; return columnName;
} }
@ -62,16 +67,7 @@ public class ColumnInfo {
this.autoIncrement = autoIncrement; this.autoIncrement = autoIncrement;
} }
@Override public Map<String, Object> getAddonInfo() {
public String toString() { return addonInfo;
final StringBuffer sb = new StringBuffer("ColumnInfo{");
sb.append("columnName='").append(columnName).append('\'');
sb.append(", propertyName='").append(propertyName).append('\'');
sb.append(", sqlType='").append(sqlDataType).append('\'');
sb.append(", javaType='").append(javaDataType).append('\'');
sb.append(", comment='").append(comment).append('\'');
sb.append(", autoIncrement=").append(autoIncrement);
sb.append('}');
return sb.toString();
} }
} }

@ -0,0 +1,34 @@
package space.caoshd.otone.entity;
public class IndexInfo {
private String nonUnique;
private String indexName;
private String columnName;
public String getNonUnique() {
return nonUnique;
}
public void setNonUnique(String nonUnique) {
this.nonUnique = nonUnique;
}
public String getIndexName() {
return indexName;
}
public void setIndexName(String indexName) {
this.indexName = indexName;
}
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
}

@ -1,6 +1,7 @@
package space.caoshd.otone.entity; package space.caoshd.otone.entity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -17,15 +18,15 @@ public class TableInfo {
private String queryBeanName; private String queryBeanName;
private List<ColumnInfo> columnInfoList = new ArrayList<>(); private Boolean dateExists;
private Map<String, List<ColumnInfo>> indexMap = new LinkedHashMap<>(); private Boolean decimalExists;
private Boolean dateExists; private List<ColumnInfo> columnInfo = new ArrayList<>();
private Boolean dateTimeExists; private Map<String, List<ColumnInfo>> indexInfo = new LinkedHashMap<>();
private Boolean bigDecimalExists; private final Map<String, Object> addonInfo = new HashMap<>();
public String getComment() { public String getComment() {
return comment; return comment;
@ -67,47 +68,39 @@ public class TableInfo {
this.queryBeanName = queryBeanName; this.queryBeanName = queryBeanName;
} }
public List<ColumnInfo> getFieldInfoList() { public Boolean getDateExists() {
return columnInfoList; return dateExists;
} }
public void setFieldInfoList(List<ColumnInfo> columnInfoList) { public void setDateExists(Boolean dateExists) {
this.columnInfoList = columnInfoList; this.dateExists = dateExists;
} }
public Map<String, List<ColumnInfo>> getIndexMap() { public Boolean getDecimalExists() {
return indexMap; return decimalExists;
} }
public void setIndexMap(Map<String, List<ColumnInfo>> indexMap) { public void setDecimalExists(Boolean decimalExists) {
this.indexMap = indexMap; this.decimalExists = decimalExists;
} }
public Boolean getDateExists() { public List<ColumnInfo> getColumnInfo() {
return dateExists; return columnInfo;
}
public void setColumnInfo(List<ColumnInfo> columnInfo) {
this.columnInfo = columnInfo;
}
public Map<String, List<ColumnInfo>> getIndexInfo() {
return indexInfo;
}
public void setIndexInfo(Map<String, List<ColumnInfo>> indexInfo) {
this.indexInfo = indexInfo;
} }
public Boolean getBigDecimalExists() { public Map<String, Object> getAddonInfo() {
return bigDecimalExists; return addonInfo;
}
@Override
public String toString() {
return String.format(
"TableInfo{comment='%s', tableSchema='%s', tableName='%s', beanName='%s', "
+ "queryBeanName='%s', fieldInfoList=%s, indexMap=%s,"
+ "dateExists=%s, dateTimeExists=%s, bigDecimalExists=%s}",
comment,
tableSchema,
tableName,
beanName,
queryBeanName,
columnInfoList,
indexMap,
dateExists,
dateTimeExists,
bigDecimalExists
);
} }
} }

@ -0,0 +1,9 @@
package space.caoshd.otone.extension;
import space.caoshd.otone.entity.ColumnInfo;
import java.util.Map;
public interface ColumnAddonAble {
void addon(ColumnInfo tableInfo, Map<String,Object> addInfo);
}

@ -0,0 +1,9 @@
package space.caoshd.otone.extension;
import space.caoshd.otone.entity.TableInfo;
import java.util.Map;
public interface TableAddonAble {
void addon(TableInfo tableInfo, Map<String, Object> addInfo);
}

@ -0,0 +1,13 @@
package space.caoshd.otone.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class JsonUtils {
public static String toJson(Object object) {
return JSON.toJSONString(
object,
SerializerFeature.DisableCircularReferenceDetect
);
}
}

@ -2,6 +2,8 @@ package space.caoshd.otone.util;
public class SqlConsts { public class SqlConsts {
private SqlConsts() {} private SqlConsts() {}
public static final String TABLE_SQL = "table.sql"; public static final String TABLE_SQL = "table.sql";
@ -12,6 +14,8 @@ public class SqlConsts {
public static final String COLUMN_SQL_SCHEMA_TABLE = "column.sql.schema.table"; public static final String COLUMN_SQL_SCHEMA_TABLE = "column.sql.schema.table";
public static final String INDEX_SQL_SCHEMA_TABLE = "index.sql.schema.table";
public static final String LABEL_TABLE_NAME = "label.table_name"; public static final String LABEL_TABLE_NAME = "label.table_name";
public static final String LABEL_TABLE_SCHEMA = "label.table_schema"; public static final String LABEL_TABLE_SCHEMA = "label.table_schema";
@ -22,6 +26,10 @@ public class SqlConsts {
public static final String LABEL_COLUMN_COMMENT = "label.column_comment"; public static final String LABEL_COLUMN_COMMENT = "label.column_comment";
public static final String LABEL_INDEX_NAME = "label.index_name";
public static final String LABEL_NON_UNIQUE = "label.non_unique";
public static final String LABEL_DATA_TYPE = "label.data_type"; public static final String LABEL_DATA_TYPE = "label.data_type";
public static final String LABEL_EXTRA = "label.extra"; public static final String LABEL_EXTRA = "label.extra";

@ -0,0 +1,10 @@
package space.caoshd.otone.builder;
import org.junit.jupiter.api.Test;
class ColumnBuilderTest {
@Test
void loadColumnInfo() {
}
}

@ -5,14 +5,14 @@ import space.caoshd.otone.entity.TableInfo;
import java.util.List; import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class TableBuilderTest { class TableBuilderTest {
@Test @Test
void loadTableInfo() { void loadTableInfo() {
List<TableInfo> tableInfos = List<TableInfo> tableInfoList = new TableBuilder().addTableAddonAble((
TableBuilder.loadTableInfo(); tableInfo, addonInfo
System.out.println(tableInfos); ) -> addonInfo.put("author", "caoshd"))
.addColumnAddonAble((columnInfo, addonInfo) -> System.out.println(addonInfo))
.build();
} }
} }

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %-21logger{20}: %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
</configuration>

@ -1,13 +1,15 @@
table.sql=select * from information_schema.tables where TABLE_SCHEMA not in ('mysql', 'information_schema', 'performance_schema', 'sys') table.sql=select * from information_schema.tables where TABLE_SCHEMA not in ('mysql', 'information_schema', 'performance_schema', 'sys')
table.sql.schema=select * from information_schema.tables where table_schema = ? table.sql.schema=select * from information_schema.tables where table_schema = ?
table.sql.schema.table=select * from information_schema.tables where table_schema = ? and table_name = ? table.sql.schema.table=select * from information_schema.tables where table_schema = ? and table_name = ?
column.sql.schema.table=select * from information_schema.columns where table_schema = ? and table_name = ?
column.sql.schema.table=select * from information_schema.columns where TABLE_SCHEMA = ? and table_name = ? index.sql.schema.table=select * from information_schema.statistics where table_schema = ? and table_name = ?
label.table_schema=TABLE_SCHEMA label.table_schema=TABLE_SCHEMA
label.table_name=TABLE_NAME label.table_name=TABLE_NAME
label.table_comment=TABLE_COMMENT label.table_comment=TABLE_COMMENT
label.column_name=COLUMN_NAME label.column_name=COLUMN_NAME
label.column_comment=COLUMN_COMMENT label.column_comment=COLUMN_COMMENT
label.index_name=INDEX_NAME
label.non_unique=NON_UNIQUE
label.data_type=DATA_TYPE label.data_type=DATA_TYPE
label.extra=EXTRA label.extra=EXTRA

Loading…
Cancel
Save