package foundation.data.object;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import foundation.data.entity.Filter;
|
import foundation.data.meta.field.Field;
|
import foundation.data.meta.field.FieldsRuntime;
|
import foundation.persist.NamedSQL;
|
import foundation.util.ContentBuilder;
|
import foundation.util.MapList;
|
import foundation.value.ValueType;
|
|
public class TableObject {
|
|
public static String createTableSql;
|
|
public static void syncTable(DataObject dataObject, FieldsRuntime fields) {
|
//1. 创建表(创建前检查)
|
|
|
|
//2. 修改表结构
|
|
}
|
|
public static void createTempTable(String tableName) throws Exception {
|
String tempTableName = "temp_" + tableName;
|
|
//1. 创建表(创建前检查)
|
try {
|
DataObject dataObject = DataObject.getInstance(tempTableName);
|
dataObject.getCount(new Filter("1 <> 1"));
|
}
|
catch (Exception e) {
|
NamedSQL namedSQL = NamedSQL.getInstance("createTempTable");
|
namedSQL.setTableName(tableName);
|
namedSQL.execute();
|
}
|
|
|
//2. 增加辅助字段
|
ContentBuilder builder = new ContentBuilder(",");
|
|
MapList<String, Field> additionalFields = getRegularFields();
|
for (Field field : additionalFields) {
|
builder.append(field.addSQL());
|
}
|
|
MapList<String, Field> assistFields = getAssistFields(tempTableName);
|
for (Field field : assistFields) {
|
builder.append(field.addSQL());
|
}
|
|
String sql = "ALTER TABLE " + tempTableName + builder.toString();
|
|
NamedSQL namedSQL = new NamedSQL("addTableFields", sql);
|
namedSQL.setTableName(tempTableName);
|
namedSQL.execute();
|
}
|
|
private static MapList<String, Field> getAssistFields(String dataName) throws Exception {
|
List<Field> assistFields = new ArrayList<Field>();
|
|
DataObject dataObject = DataObject.getInstance(dataName);
|
FieldsRuntime tableFields = dataObject.getTableFieldMetas();
|
String codeField, nameField;
|
|
for (Field field : tableFields) {
|
String fieldName = field.getName();
|
|
int pos = fieldName.indexOf("_code");
|
if (pos > 0) {
|
String prefix = fieldName.substring(0, pos);
|
|
nameField = prefix + "_name";
|
Field assistField = new Field(nameField);
|
assistField.setType(ValueType.String);
|
assistField.setLength(128);
|
assistFields.add(assistField);
|
continue;
|
}
|
|
pos = fieldName.indexOf("_id");
|
if (pos > 0) {
|
String prefix = fieldName.substring(0, pos);
|
|
codeField = prefix + "_code";
|
Field assistField = new Field(codeField);
|
assistField.setType(ValueType.String);
|
assistField.setLength(20);
|
assistFields.add(field);
|
|
nameField = prefix + "_name";
|
assistField = new Field(nameField);
|
assistField.setType(ValueType.String);
|
assistField.setLength(128);
|
assistFields.add(assistField);
|
continue;
|
}
|
}
|
|
MapList<String, Field> result = new MapList<String, Field>();
|
|
for (Field field : assistFields) {
|
if (!tableFields.contains(field.getName())) {
|
result.add(field.getName(), field);
|
}
|
}
|
|
return result;
|
}
|
|
private static MapList<String, Field> getRegularFields() {
|
MapList<String, Field> additionalFields = new MapList<String, Field>();
|
|
String fieldName = "io_batch_id";
|
Field field = new Field(fieldName);
|
field.setType(ValueType.String);
|
field.setLength(32);
|
additionalFields.add(fieldName, field);
|
|
fieldName = "is_error";
|
field = new Field(fieldName);
|
field.setType(ValueType.String);
|
field.setLength(1);
|
additionalFields.add(fieldName, field);
|
|
fieldName = "error_message";
|
field = new Field(fieldName);
|
field.setType(ValueType.String);
|
field.setLength(128);
|
additionalFields.add(fieldName, field);
|
|
fieldName = "temp_code";
|
field = new Field(fieldName);
|
field.setType(ValueType.String);
|
field.setLength(20);
|
additionalFields.add(fieldName, field);
|
|
return additionalFields;
|
}
|
}
|