public PartInput[] getPartInputs() {
// 计算各表的字段信息
ResultSetMeta metaInfos = flashDatabase.getMetaInfos(mainTableOrSql);
ColumnInfo[] mainColumns = metaInfos.getColumns();
this.mainIsTableName = (mainTableOrSql.indexOf(' ') < 0);
ColumnInfo mainKeyColumnInfo;
int tablesOffset;
if (mainIsTableName) {
if (metaInfos.getKeyColumnCount() != 1)
throw new RuntimeException("Main table '"+ mainTableOrSql +"' must single key field.");
mainKeyColumnInfo = mainColumns[0];
ConverterJoinTable mainJTable = new ConverterJoinTable(mainTableOrSql, mainKeyColumnInfo.getName(), mainKeyColumnInfo.getName(), false, flashDatabase, false, false);
tables = new ConverterJoinTable[1+ joinTableInfos.length];
tablesIsPrimaryKeyM = new boolean[tables.length];
tables[0] = mainJTable;
tablesIsPrimaryKeyM[0] = true;
tablesOffset = 1;
}
else {
mainKeyColumnInfo = null;
tables = new ConverterJoinTable[joinTableInfos.length];
tablesIsPrimaryKeyM = new boolean[tables.length];
tablesOffset = 0;
}
for (int i=0; i < joinTableInfos.length; i++) {
JoinTableInfo joinTableInfo = joinTableInfos[i];
ColumnInfo joinFieldMain = ConverterJoinTable.findColumn(joinTableInfo.joinFieldMain, mainColumns);
if (joinFieldMain == null)
throw new RuntimeException("Cann't found joinFieldMain '"+joinTableInfo.joinFieldMain+"' for table '"+ joinTableInfo.tableName +"'.");
ConverterJoinTable joinTable = new ConverterJoinTable(joinTableInfo.tableName, joinFieldMain.getName(), joinTableInfo.joinFieldRelate
, (joinFieldMain.getDataType() & DataTypes.TYPE_ARRAY) > 0
, flashDatabase, false, false);
tables[tablesOffset+ i] = joinTable;
tablesIsPrimaryKeyM[tablesOffset+ i] = (joinFieldMain == mainKeyColumnInfo);
}