use of ch.ehi.sqlgen.repository.DbColDecimal in project ili2db by claeis.
the class GeneratorMsSql method visitTableBeginConstraint.
@Override
public void visitTableBeginConstraint(DbTable dbTab) throws IOException {
super.visitTableBeginConstraint(dbTab);
String sqlTabName = dbTab.getName().getQName();
for (Iterator dbColi = dbTab.iteratorColumn(); dbColi.hasNext(); ) {
DbColumn dbCol = (DbColumn) dbColi.next();
if (dbCol.getReferencedTable() != null) {
String createstmt = null;
String action = "";
if (dbCol.getOnUpdateAction() != null) {
action = action + " ON UPDATE " + dbCol.getOnUpdateAction();
}
if (dbCol.getOnDeleteAction() != null) {
action = action + " ON DELETE " + dbCol.getOnDeleteAction();
}
String constraintName = createConstraintName(dbTab, "fkey", dbCol.getName());
// +action+" DEFERRABLE INITIALLY DEFERRED";
createstmt = "ALTER TABLE " + sqlTabName + " ADD CONSTRAINT " + constraintName + " FOREIGN KEY ( " + dbCol.getName() + " ) REFERENCES " + dbCol.getReferencedTable().getQName();
String dropstmt = null;
dropstmt = "ALTER TABLE " + sqlTabName + " DROP CONSTRAINT " + constraintName;
addConstraint(dbTab, constraintName, createstmt, dropstmt);
}
if (dbCol instanceof DbColNumber && (((DbColNumber) dbCol).getMinValue() != null || ((DbColNumber) dbCol).getMaxValue() != null)) {
DbColNumber dbColNum = (DbColNumber) dbCol;
String createstmt = null;
String action = "";
if (dbColNum.getMinValue() != null || dbColNum.getMaxValue() != null) {
if (dbColNum.getMaxValue() == null) {
action = ">=" + dbColNum.getMinValue();
} else if (dbColNum.getMinValue() == null) {
action = "<=" + dbColNum.getMaxValue();
} else {
action = "BETWEEN " + dbColNum.getMinValue() + " AND " + dbColNum.getMaxValue();
}
}
String constraintName = createConstraintName(dbTab, "check", dbCol.getName());
createstmt = "ALTER TABLE " + sqlTabName + " ADD CONSTRAINT " + constraintName + " CHECK( " + dbCol.getName() + " " + action + ")";
String dropstmt = null;
dropstmt = "ALTER TABLE " + sqlTabName + " DROP CONSTRAINT " + constraintName;
addConstraint(dbTab, constraintName, createstmt, dropstmt);
} else if (dbCol instanceof DbColDecimal && (((DbColDecimal) dbCol).getMinValue() != null || ((DbColDecimal) dbCol).getMaxValue() != null)) {
DbColDecimal dbColNum = (DbColDecimal) dbCol;
String createstmt = null;
String action = "";
if (dbColNum.getMinValue() != null || dbColNum.getMaxValue() != null) {
if (dbColNum.getMaxValue() == null) {
action = ">=" + dbColNum.getMinValue();
} else if (dbColNum.getMinValue() == null) {
action = "<=" + dbColNum.getMaxValue();
} else {
action = "BETWEEN " + dbColNum.getMinValue() + " AND " + dbColNum.getMaxValue();
}
}
String constraintName = createConstraintName(dbTab, "check", dbCol.getName());
createstmt = "ALTER TABLE " + sqlTabName + " ADD CONSTRAINT " + constraintName + " CHECK( " + dbCol.getName() + " " + action + ")";
String dropstmt = null;
dropstmt = "ALTER TABLE " + sqlTabName + " DROP CONSTRAINT " + constraintName;
addConstraint(dbTab, constraintName, createstmt, dropstmt);
}
}
}
use of ch.ehi.sqlgen.repository.DbColDecimal 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.DbColDecimal in project ili2db by claeis.
the class GeneratorMsSql method visitColumn.
@Override
public void visitColumn(DbTable dbTab, DbColumn column) throws IOException {
String type = "";
if (column instanceof DbColBoolean) {
type = "BIT";
} else if (column instanceof DbColDateTime) {
type = "DATETIME";
} else if (column instanceof DbColDate) {
type = "DATE";
} else if (column instanceof DbColTime) {
type = "TIME";
} else if (column instanceof DbColDecimal) {
DbColDecimal col = (DbColDecimal) column;
type = "DECIMAL(" + Integer.toString(col.getSize()) + "," + Integer.toString(col.getPrecision()) + ")";
} else if (column instanceof DbColGeometry) {
type = "GEOMETRY";
} else if (column instanceof DbColId) {
type = "BIGINT";
} else if (column instanceof DbColUuid) {
type = "VARCHAR(36)";
} else if (column instanceof DbColNumber) {
DbColNumber col = (DbColNumber) column;
type = "NUMERIC(" + Integer.toString(col.getSize()) + ")";
} else if (column instanceof DbColVarchar) {
int colsize = ((DbColVarchar) column).getSize();
if (colsize != DbColVarchar.UNLIMITED)
type = "VARCHAR(" + Integer.toString(colsize) + ")";
else
type = "VARCHAR(MAX)";
} else {
type = "VARCHAR(MAX)";
}
String isNull = column.isNotNull() ? "NOT NULL" : "NULL";
if (column.isPrimaryKey()) {
isNull = "PRIMARY KEY";
}
String sep = " ";
String defaultValue = "";
if (column.getDefaultValue() != null) {
defaultValue = sep + "DEFAULT (" + column.getDefaultValue() + ")";
sep = " ";
}
String name = column.getName();
out.write(getIndent() + colSep + "[" + name + "] " + type + " " + isNull + defaultValue + newline());
colSep = ",";
}
Aggregations