use of ch.ehi.sqlgen.repository.DbColVarchar in project ili2db by claeis.
the class MetaAttrUtility method addMetaAttributesTable.
// Create meta-attributes table
public static void addMetaAttributesTable(DbSchema schema) {
DbTable tab = new DbTable();
tab.setName(new DbTableName(schema.getName(), DbNames.META_ATTRIBUTES_TAB));
DbColVarchar ilielementCol = new DbColVarchar();
ilielementCol.setName(DbNames.META_ATTRIBUTES_TAB_ILIELEMENT_COL);
ilielementCol.setNotNull(true);
ilielementCol.setSize(255);
tab.addColumn(ilielementCol);
DbColVarchar attrnameCol = new DbColVarchar();
attrnameCol.setName(DbNames.META_ATTRIBUTES_TAB_ATTRNAME_COL);
attrnameCol.setNotNull(true);
attrnameCol.setSize(1024);
tab.addColumn(attrnameCol);
DbColVarchar attrvalueCol = new DbColVarchar();
attrvalueCol.setName(DbNames.META_ATTRIBUTES_TAB_ATTRVALUE_COL);
attrvalueCol.setNotNull(true);
attrvalueCol.setSize(1024);
tab.addColumn(attrvalueCol);
schema.addTable(tab);
}
use of ch.ehi.sqlgen.repository.DbColVarchar in project ili2db by claeis.
the class FromIliRecordConverter method generateAttr.
public void generateAttr(DbTable dbTable, Viewable aclass, AttributeDef attr) throws Ili2dbException {
Holder<DbColumn> dbCol = new Holder<DbColumn>();
dbCol.value = null;
Holder<Unit> unitDef = new Holder<Unit>();
unitDef.value = null;
Holder<Boolean> mText = new Holder<Boolean>();
mText.value = false;
ArrayList<DbColumn> dbColExts = new ArrayList<DbColumn>();
Type type = attr.getDomainResolvingAll();
if (createSimpleDbCol(dbTable, aclass, attr, type, dbCol, unitDef, mText, dbColExts)) {
} else if (type instanceof SurfaceOrAreaType) {
if (createItfLineTables) {
dbCol.value = null;
} else {
DbColGeometry ret = new DbColGeometry();
boolean curvePolygon = false;
if (!strokeArcs) {
curvePolygon = true;
}
ret.setType(curvePolygon ? DbColGeometry.CURVEPOLYGON : DbColGeometry.POLYGON);
// get crs from ili
setCrs(ret, attr);
CoordType coord = (CoordType) ((SurfaceOrAreaType) type).getControlPointDomain().getType();
ret.setDimension(coord.getDimensions().length);
setBB(ret, coord, attr.getContainer().getScopedName(null) + "." + attr.getName());
dbCol.value = ret;
}
if (createItfAreaRef) {
if (type instanceof AreaType) {
DbColGeometry ret = new DbColGeometry();
String sqlName = getSqlAttrName(attr, dbTable.getName().getName(), null) + DbNames.ITF_MAINTABLE_GEOTABLEREF_COL_SUFFIX;
ret.setName(sqlName);
ret.setType(DbColGeometry.POINT);
setNullable(aclass, attr, ret);
// get crs from ili
setCrs(ret, attr);
// always 2 (even if defined as 3d in ili)
ret.setDimension(2);
CoordType coord = (CoordType) ((SurfaceOrAreaType) type).getControlPointDomain().getType();
setBB(ret, coord, attr.getContainer().getScopedName(null) + "." + attr.getName());
dbColExts.add(ret);
}
}
} else if (type instanceof PolylineType) {
String attrName = attr.getContainer().getScopedName(null) + "." + attr.getName();
DbColGeometry ret = generatePolylineType((PolylineType) type, attrName);
setCrs(ret, attr);
dbCol.value = ret;
} else if (type instanceof CoordType) {
DbColGeometry ret = new DbColGeometry();
ret.setType(DbColGeometry.POINT);
// get crs from ili
setCrs(ret, attr);
CoordType coord = (CoordType) type;
ret.setDimension(coord.getDimensions().length);
setBB(ret, coord, attr.getContainer().getScopedName(null) + "." + attr.getName());
dbCol.value = ret;
} else if (type instanceof CompositionType) {
// skip it
if (!createGenericStructRef) {
if (isChbaseCatalogueRef(td, attr) && (coalesceCatalogueRef || TrafoConfigNames.CATALOGUE_REF_TRAFO_COALESCE.equals(trafoConfig.getAttrConfig(attr, TrafoConfigNames.CATALOGUE_REF_TRAFO)))) {
DbColId ret = new DbColId();
ret.setNotNull(false);
ret.setPrimaryKey(false);
if (createFk) {
ret.setReferencedTable(getSqlType(((ReferenceType) ((AttributeDef) ((CompositionType) type).getComponentType().getAttributes().next()).getDomain()).getReferred()));
}
if (createFkIdx) {
ret.setIndex(true);
}
trafoConfig.setAttrConfig(attr, TrafoConfigNames.CATALOGUE_REF_TRAFO, TrafoConfigNames.CATALOGUE_REF_TRAFO_COALESCE);
dbCol.value = ret;
} else if (Ili2cUtility.isMultiSurfaceAttr(td, attr) && (coalesceMultiSurface || TrafoConfigNames.MULTISURFACE_TRAFO_COALESCE.equals(trafoConfig.getAttrConfig(attr, TrafoConfigNames.MULTISURFACE_TRAFO)))) {
multiSurfaceAttrs.addMultiSurfaceAttr(attr);
MultiSurfaceMapping attrMapping = multiSurfaceAttrs.getMapping(attr);
DbColGeometry ret = new DbColGeometry();
boolean curvePolygon = false;
if (!strokeArcs) {
curvePolygon = true;
}
ret.setType(curvePolygon ? DbColGeometry.MULTISURFACE : DbColGeometry.MULTIPOLYGON);
// get crs from ili
AttributeDef surfaceAttr = (AttributeDef) ((CompositionType) ((AttributeDef) ((CompositionType) type).getComponentType().getElement(AttributeDef.class, attrMapping.getBagOfSurfacesAttrName())).getDomain()).getComponentType().getElement(AttributeDef.class, attrMapping.getSurfaceAttrName());
setCrs(ret, surfaceAttr);
SurfaceType surface = ((SurfaceType) surfaceAttr.getDomainResolvingAliases());
CoordType coord = (CoordType) surface.getControlPointDomain().getType();
ret.setDimension(coord.getDimensions().length);
setBB(ret, coord, attr.getContainer().getScopedName(null) + "." + attr.getName());
dbCol.value = ret;
trafoConfig.setAttrConfig(attr, TrafoConfigNames.MULTISURFACE_TRAFO, TrafoConfigNames.MULTISURFACE_TRAFO_COALESCE);
} else if (Ili2cUtility.isMultiLineAttr(td, attr) && (coalesceMultiLine || TrafoConfigNames.MULTILINE_TRAFO_COALESCE.equals(trafoConfig.getAttrConfig(attr, TrafoConfigNames.MULTILINE_TRAFO)))) {
multiLineAttrs.addMultiLineAttr(attr);
MultiLineMapping attrMapping = multiLineAttrs.getMapping(attr);
DbColGeometry ret = new DbColGeometry();
boolean curvePolyline = false;
if (!strokeArcs) {
curvePolyline = true;
}
ret.setType(curvePolyline ? DbColGeometry.MULTICURVE : DbColGeometry.MULTILINESTRING);
// get crs from ili
AttributeDef polylineAttr = (AttributeDef) ((CompositionType) ((AttributeDef) ((CompositionType) type).getComponentType().getElement(AttributeDef.class, attrMapping.getBagOfLinesAttrName())).getDomain()).getComponentType().getElement(AttributeDef.class, attrMapping.getLineAttrName());
setCrs(ret, polylineAttr);
PolylineType polylineType = ((PolylineType) polylineAttr.getDomainResolvingAliases());
CoordType coord = (CoordType) polylineType.getControlPointDomain().getType();
ret.setDimension(coord.getDimensions().length);
setBB(ret, coord, attr.getContainer().getScopedName(null) + "." + attr.getName());
dbCol.value = ret;
trafoConfig.setAttrConfig(attr, TrafoConfigNames.MULTILINE_TRAFO, TrafoConfigNames.MULTILINE_TRAFO_COALESCE);
} else if (Ili2cUtility.isMultiPointAttr(td, attr) && (coalesceMultiPoint || TrafoConfigNames.MULTIPOINT_TRAFO_COALESCE.equals(trafoConfig.getAttrConfig(attr, TrafoConfigNames.MULTIPOINT_TRAFO)))) {
multiPointAttrs.addMultiPointAttr(attr);
MultiPointMapping attrMapping = multiPointAttrs.getMapping(attr);
DbColGeometry ret = new DbColGeometry();
ret.setType(DbColGeometry.MULTIPOINT);
// get crs from ili
AttributeDef coordAttr = (AttributeDef) ((CompositionType) ((AttributeDef) ((CompositionType) type).getComponentType().getElement(AttributeDef.class, attrMapping.getBagOfPointsAttrName())).getDomain()).getComponentType().getElement(AttributeDef.class, attrMapping.getPointAttrName());
setCrs(ret, coordAttr);
CoordType coord = (CoordType) (coordAttr.getDomainResolvingAliases());
ret.setDimension(coord.getDimensions().length);
setBB(ret, coord, attr.getContainer().getScopedName(null) + "." + attr.getName());
dbCol.value = ret;
trafoConfig.setAttrConfig(attr, TrafoConfigNames.MULTIPOINT_TRAFO, TrafoConfigNames.MULTIPOINT_TRAFO_COALESCE);
} else if (Ili2cUtility.isArrayAttr(td, attr) && (coalesceArray || TrafoConfigNames.ARRAY_TRAFO_COALESCE.equals(trafoConfig.getAttrConfig(attr, TrafoConfigNames.ARRAY_TRAFO)))) {
arrayAttrs.addArrayAttr(attr);
ArrayMapping attrMapping = arrayAttrs.getMapping(attr);
AttributeDef localAttr = attrMapping.getValueAttr();
Type localType = localAttr.getDomainResolvingAll();
if (!createSimpleDbCol(dbTable, aclass, localAttr, localType, dbCol, unitDef, mText, dbColExts)) {
throw new IllegalStateException("unexpected attr type " + localAttr.getScopedName());
}
dbCol.value.setArraySize(DbColumn.UNLIMITED_ARRAY);
trafoConfig.setAttrConfig(attr, TrafoConfigNames.ARRAY_TRAFO, TrafoConfigNames.ARRAY_TRAFO_COALESCE);
} else if (isChbaseMultilingual(td, attr) && (expandMultilingual || TrafoConfigNames.MULTILINGUAL_TRAFO_EXPAND.equals(trafoConfig.getAttrConfig(attr, TrafoConfigNames.MULTILINGUAL_TRAFO)))) {
for (String sfx : DbNames.MULTILINGUAL_TXT_COL_SUFFIXS) {
DbColVarchar ret = new DbColVarchar();
ret.setName(getSqlAttrName(attr, dbTable.getName().getName(), null) + sfx);
ret.setSize(DbColVarchar.UNLIMITED);
ret.setNotNull(false);
ret.setPrimaryKey(false);
dbColExts.add(ret);
}
trafoConfig.setAttrConfig(attr, TrafoConfigNames.MULTILINGUAL_TRAFO, TrafoConfigNames.MULTILINGUAL_TRAFO_EXPAND);
} else {
// add reference col from struct ele to parent obj to struct table
addParentRef(aclass, attr);
dbCol.value = null;
}
} else {
dbCol.value = null;
}
} else if (type instanceof ReferenceType) {
ArrayList<ViewableWrapper> targetTables = getTargetTables(((ReferenceType) type).getReferred());
for (ViewableWrapper targetTable : targetTables) {
DbColId ret = new DbColId();
ret.setName(ili2sqlName.mapIliAttributeDef(attr, dbTable.getName().getName(), targetTable.getSqlTablename(), targetTables.size() > 1));
ret.setNotNull(false);
ret.setPrimaryKey(false);
if (createFk) {
ret.setReferencedTable(targetTable.getSqlTable());
}
if (createFkIdx) {
ret.setIndex(true);
}
dbColExts.add(ret);
}
} else {
DbColVarchar ret = new DbColVarchar();
ret.setSize(255);
dbCol.value = ret;
}
if (type instanceof EnumerationType) {
if (createEnumTxtCol) {
DbColVarchar ret = new DbColVarchar();
ret.setSize(255);
ret.setName(getSqlAttrName(attr, dbTable.getName().getName(), null) + DbNames.ENUM_TXT_COL_SUFFIX);
setNullable(aclass, attr, ret);
dbColExts.add(ret);
}
}
if (dbCol.value != null) {
String sqlColName = getSqlAttrName(attr, dbTable.getName().getName(), null);
setAttrDbColProps(aclass, attr, dbCol.value, sqlColName);
String subType = null;
Viewable attrClass = (Viewable) attr.getContainer();
if (attrClass != aclass && attrClass.isExtending(aclass)) {
subType = getSqlType(attrClass).getName();
}
if (unitDef.value != null) {
String unitName = unitDef.value.getName();
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_UNIT, unitName);
}
if (mText.value) {
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_TEXTKIND, DbExtMetaInfo.TAG_COL_TEXTKIND_MTEXT);
}
if (dbCol.value instanceof DbColGeometry) {
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_C1_MIN, Double.toString(((DbColGeometry) dbCol.value).getMin1()));
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_C1_MAX, Double.toString(((DbColGeometry) dbCol.value).getMax1()));
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_C2_MIN, Double.toString(((DbColGeometry) dbCol.value).getMin2()));
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_C2_MAX, Double.toString(((DbColGeometry) dbCol.value).getMax2()));
if (((DbColGeometry) dbCol.value).getDimension() == 3) {
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_C3_MIN, Double.toString(((DbColGeometry) dbCol.value).getMin3()));
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_C3_MAX, Double.toString(((DbColGeometry) dbCol.value).getMax3()));
}
}
String dispName = attr.getMetaValues().getValue(IliMetaAttrNames.METAATTR_DISPNAME);
if (dispName != null) {
metaInfo.setColumnInfo(dbTable.getName().getName(), subType, sqlColName, DbExtMetaInfo.TAG_COL_DISPNAME, dispName);
}
customMapping.fixupAttribute(dbTable, dbCol.value, attr);
dbTable.addColumn(dbCol.value);
}
for (DbColumn dbColExt : dbColExts) {
customMapping.fixupAttribute(dbTable, dbColExt, attr);
dbTable.addColumn(dbColExt);
}
if (dbCol.value == null && dbColExts.size() == 0) {
customMapping.fixupAttribute(dbTable, null, attr);
}
}
use of ch.ehi.sqlgen.repository.DbColVarchar in project ili2db by claeis.
the class FromIliRecordConverter method createSimpleDbCol.
private boolean createSimpleDbCol(DbTable dbTable, Viewable aclass, AttributeDef attr, Type type, Holder<DbColumn> dbCol, Holder<Unit> unitDef, Holder<Boolean> mText, ArrayList<DbColumn> dbColExts) {
if (attr.isDomainBoolean()) {
dbCol.value = new DbColBoolean();
} else if (attr.isDomainIli1Date()) {
dbCol.value = new DbColDate();
} else if (attr.isDomainIliUuid()) {
dbCol.value = new DbColUuid();
} else if (attr.isDomainIli2Date()) {
dbCol.value = new DbColDate();
} else if (attr.isDomainIli2DateTime()) {
dbCol.value = new DbColDateTime();
} else if (attr.isDomainIli2Time()) {
dbCol.value = new DbColTime();
} else if (type instanceof BasketType) {
// skip it; type no longer exists in ili 2.3
dbCol.value = null;
} else if (type instanceof EnumerationType) {
visitedEnumsAttrs.add(attr);
if (createEnumColAsItfCode) {
DbColId ret = new DbColId();
dbCol.value = ret;
} else {
DbColVarchar ret = new DbColVarchar();
ret.setSize(255);
dbCol.value = ret;
}
} else if (type instanceof NumericType) {
if (type.isAbstract()) {
} else {
PrecisionDecimal min = ((NumericType) type).getMinimum();
PrecisionDecimal max = ((NumericType) type).getMaximum();
int minLen = min.toString().length();
int maxLen = max.toString().length();
if (min.toString().startsWith("-")) {
minLen -= 1;
}
if (max.toString().startsWith("-")) {
maxLen -= 1;
}
if (min.getAccuracy() > 0) {
DbColDecimal ret = new DbColDecimal();
int size = Math.max(minLen, maxLen) - 1;
int precision = min.getAccuracy();
// EhiLogger.debug("attr "+ attr.getName()+", maxStr <"+maxStr+">, size "+Integer.toString(size)+", precision "+Integer.toString(precision));
ret.setSize(size);
ret.setPrecision(precision);
if (createNumCheck) {
ret.setMinValue(min.doubleValue());
ret.setMaxValue(max.doubleValue());
}
dbCol.value = ret;
} else {
DbColNumber ret = new DbColNumber();
int size = Math.max(minLen, maxLen);
ret.setSize(size);
if (createNumCheck) {
ret.setMinValue((int) min.doubleValue());
ret.setMaxValue((int) max.doubleValue());
}
dbCol.value = ret;
}
unitDef.value = ((NumericType) type).getUnit();
}
} else if (type instanceof TextType) {
DbColVarchar ret = new DbColVarchar();
if (((TextType) type).getMaxLength() > 0) {
ret.setSize(((TextType) type).getMaxLength());
} else {
ret.setSize(DbColVarchar.UNLIMITED);
}
if (!((TextType) type).isNormalized()) {
mText.value = true;
}
dbCol.value = ret;
} else if (type instanceof BlackboxType) {
if (((BlackboxType) type).getKind() == BlackboxType.eXML) {
DbColXml ret = new DbColXml();
dbCol.value = ret;
} else {
DbColBlob ret = new DbColBlob();
dbCol.value = ret;
}
} else {
return false;
}
return true;
}
use of ch.ehi.sqlgen.repository.DbColVarchar in project ili2db by claeis.
the class TransferFromIli method addSettingsTable.
public static void addSettingsTable(DbSchema schema) {
DbTable tab = new DbTable();
tab.setName(new DbTableName(schema.getName(), DbNames.SETTINGS_TAB));
DbColVarchar tagCol = new DbColVarchar();
tagCol.setName(DbNames.SETTINGS_TAB_TAG_COL);
tagCol.setNotNull(true);
tagCol.setPrimaryKey(true);
tagCol.setSize(60);
tab.addColumn(tagCol);
DbColVarchar settingCol = new DbColVarchar();
settingCol.setName(DbNames.SETTINGS_TAB_SETTING_COL);
settingCol.setNotNull(false);
settingCol.setSize(255);
tab.addColumn(settingCol);
schema.addTable(tab);
}
use of ch.ehi.sqlgen.repository.DbColVarchar in project ili2db by claeis.
the class TransferFromIli method addEnumTable.
public void addEnumTable(DbSchema schema) {
if (Config.CREATE_ENUM_DEFS_SINGLE.equals(createEnumTable)) {
DbTable tab = new DbTable();
DbColVarchar thisClass = new DbColVarchar();
thisClass.setName(DbNames.ENUM_TAB_THIS_COL);
thisClass.setNotNull(true);
thisClass.setSize(1024);
tab.addColumn(thisClass);
DbColVarchar baseClass = new DbColVarchar();
baseClass.setName(DbNames.ENUM_TAB_BASE_COL);
baseClass.setNotNull(false);
baseClass.setSize(1024);
tab.addColumn(baseClass);
DbColNumber seq = new DbColNumber();
seq.setName(DbNames.ENUM_TAB_SEQ_COL);
seq.setNotNull(false);
seq.setSize(4);
tab.addColumn(seq);
DbColBoolean inactiveCol = new DbColBoolean();
inactiveCol.setName(DbNames.ENUM_TAB_INACTIVE_COL);
inactiveCol.setNotNull(true);
tab.addColumn(inactiveCol);
DbColVarchar iliCode = new DbColVarchar();
iliCode.setName(DbNames.ENUM_TAB_ILICODE_COL);
iliCode.setNotNull(true);
iliCode.setSize(1024);
tab.addColumn(iliCode);
tab.setName(new DbTableName(schema.getName(), DbNames.ENUM_TAB));
DbColNumber itfCode = new DbColNumber();
itfCode.setName(DbNames.ENUM_TAB_ITFCODE_COL);
itfCode.setNotNull(true);
itfCode.setSize(4);
tab.addColumn(itfCode);
DbColVarchar dispName = new DbColVarchar();
dispName.setName(DbNames.ENUM_TAB_DISPNAME_COL);
dispName.setNotNull(true);
dispName.setSize(250);
tab.addColumn(dispName);
DbColVarchar description = new DbColVarchar();
description.setName(DbNames.ENUM_TAB_DESCRIPTION_COL);
description.setNotNull(false);
description.setSize(1024);
tab.addColumn(description);
schema.addTable(tab);
} else if (Config.CREATE_ENUM_DEFS_MULTI.equals(createEnumTable)) {
addMissingEnumDomains(visitedEnums);
java.util.Iterator entri = visitedEnums.iterator();
while (entri.hasNext()) {
Object entro = entri.next();
DbTableName thisSqlName = null;
if (entro instanceof AttributeDef) {
AttributeDef attr = (AttributeDef) entro;
ch.interlis.ili2c.metamodel.Type type = attr.getDomain();
if (type instanceof ch.interlis.ili2c.metamodel.TypeAlias) {
// skip it
continue;
} else {
thisSqlName = getSqlTableNameEnum(attr);
}
} else if (entro instanceof Domain) {
Domain domain = (Domain) entro;
if (domain == td.INTERLIS.BOOLEAN) {
continue;
}
thisSqlName = getSqlTableName(domain);
}
if (thisSqlName != null) {
DbTable tab = new DbTable();
tab.setName(thisSqlName);
DbColNumber itfCode = new DbColNumber();
itfCode.setName(DbNames.ENUM_TAB_ITFCODE_COL);
itfCode.setNotNull(true);
itfCode.setSize(4);
itfCode.setPrimaryKey(true);
tab.addColumn(itfCode);
DbColVarchar iliCode = new DbColVarchar();
iliCode.setName(DbNames.ENUM_TAB_ILICODE_COL);
iliCode.setNotNull(true);
iliCode.setSize(1024);
tab.addColumn(iliCode);
DbColNumber seq = new DbColNumber();
seq.setName(DbNames.ENUM_TAB_SEQ_COL);
seq.setNotNull(false);
seq.setSize(4);
tab.addColumn(seq);
DbColBoolean inactiveCol = new DbColBoolean();
inactiveCol.setName(DbNames.ENUM_TAB_INACTIVE_COL);
inactiveCol.setNotNull(true);
tab.addColumn(inactiveCol);
DbColVarchar dispName = new DbColVarchar();
dispName.setName(DbNames.ENUM_TAB_DISPNAME_COL);
dispName.setNotNull(true);
dispName.setSize(250);
tab.addColumn(dispName);
DbColVarchar description = new DbColVarchar();
description.setName(DbNames.ENUM_TAB_DESCRIPTION_COL);
description.setNotNull(false);
description.setSize(1024);
tab.addColumn(description);
schema.addTable(tab);
metaInfo.setTableInfo(tab.getName().getName(), DbExtMetaInfo.TAG_TAB_TABLEKIND, DbExtMetaInfo.TAG_TAB_TABLEKIND_ENUM);
}
}
}
}
Aggregations