// }
if (tRes.next()) {
log.t("--- found table",tName);
MutableMetadata caoMeta = null;
if (caoBundle !=null) {
caoMeta = new MutableMetadata(caoBundle.getDriver());
caoBundle.getBundle().put(tName, caoMeta);
}
// check fields
for (IConfig cfield : ctable.getConfigBundle("field")) {
String fNameOrg = cfield.getExtracted("name");
String fName = normalizeColumnName(fNameOrg);
if (cfield.getString(K_CATEGORIES, "").indexOf(C_VIRTUAL) < 0) {
ResultSet fRes = meta.getColumns(null, null, tn, fName);
log.t("field",tName,fNameOrg);
if (fRes.next()) {
String fName2 = fRes.getString("COLUMN_NAME");
String fType = fRes.getString("TYPE_NAME");
int fSize = fRes.getInt("COLUMN_SIZE");
int fNull = fRes.getInt("NULLABLE");
String fDef = fRes.getString("COLUMN_DEF");
log.t("found field",tName,fName2,fType,fSize,fNull,fDef);
// check field type && not null
String fType1 = getDbType(cfield);
if (fType.indexOf("CHAR") >=0) fType = fType + "(" + fSize + ")"; // add size to type
if (!fType1.equals(fType)) {
alterColumn(sth,tn,cfield);
} else {
boolean xdef = cfield.getProperty("default") != null;
// check field default
if (fDef != null && !xdef) {
//remove default
alterColumnDropDefault(sth,tn,fName);
} else
if (fDef == null && xdef || fDef != null && !fDef.equals(cfield.getProperty("default")) ) {
//set default
alterColumnSetDefault(sth,tn,fName,cfield);
}
}
} else {
alterColumnAdd(sth,tn,cfield);
}
fRes.close();
}
if (caoMeta != null) {
List<CaoMetaDefinition> metaMap = caoMeta.getMap();
CaoMetaDefinition.TYPE caoType = getCaoType(cfield);
String[] categories = MString.splitIgnoreEmpty(cfield.getString(K_CATEGORIES, ""),",",true);
metaMap.add(new CaoMetaDefinition(caoMeta, cfield.getExtracted("name"), caoType, cfield.getExtracted("nls"), cfield.getInt("size",100), categories ));
}
}
// END fields
if (tRes.next()) {
log.t("*** found more then one tables",tName);
}
} else {
log.t("--- table not found",tName);
// create
MutableMetadata caoMeta = null;
if (caoBundle !=null) {
caoMeta = new MutableMetadata(caoBundle.getDriver());
caoBundle.getBundle().put(tName, caoMeta);
}
createTable(sth,tn,ctable);
for (IConfig f:ctable.getConfigBundle("field")) {
if (caoMeta != null) {
List<CaoMetaDefinition> metaMap = caoMeta.getMap();
CaoMetaDefinition.TYPE caoType = getCaoType(f);
metaMap.add(new CaoMetaDefinition(caoMeta, f.getExtracted("name"), caoType, f.getExtracted("nls"), f.getInt("size",100) ));
}
}
}