package org.whole.lang.rdb.util; import static org.whole.lang.sql.reflect.SQLEntityDescriptorEnum.*; import java.util.HashMap; import java.util.Map; import org.whole.lang.models.factories.ModelsEntityFactory; import org.whole.lang.models.model.SimpleName; import org.whole.lang.rdb.model.Type; import org.whole.lang.rdb.model.TypeEnum; import org.whole.lang.rdb.model.TypeEnum.Value; import org.whole.lang.reflect.EntityDescriptor; public class RDBHelpers { private static Map<Value, String> dataTypeMap; private static Map<Value, EntityDescriptor<?>> sqlValueMap; static { dataTypeMap = new HashMap<Value, String>(); dataTypeMap.put(TypeEnum.BIT, "boolean"); dataTypeMap.put(TypeEnum.BOOLEAN, "boolean"); dataTypeMap.put(TypeEnum.TINYINT, "int"); dataTypeMap.put(TypeEnum.SMALLINT, "int"); dataTypeMap.put(TypeEnum.INTEGER, "int"); dataTypeMap.put(TypeEnum.BIGINT, "int"); dataTypeMap.put(TypeEnum.REAL, "float"); dataTypeMap.put(TypeEnum.FLOAT, "double"); dataTypeMap.put(TypeEnum.DOUBLE, "double"); dataTypeMap.put(TypeEnum.NUMERIC, "java.math.BigDecimal"); dataTypeMap.put(TypeEnum.DECIMAL, "java.math.BigDecimal"); dataTypeMap.put(TypeEnum.TEXT, "String"); dataTypeMap.put(TypeEnum.DATALINK, "String"); dataTypeMap.put(TypeEnum.REF, "String"); dataTypeMap.put(TypeEnum.DATE, "java.sql.Date"); dataTypeMap.put(TypeEnum.TIME, "java.sql.Time"); dataTypeMap.put(TypeEnum.TIMESTAMP, "java.sql.Timestamp"); dataTypeMap.put(TypeEnum.ARRAY, "java.sql.Array"); dataTypeMap.put(TypeEnum.CHAR, "String"); dataTypeMap.put(TypeEnum.VARCHAR, "String"); dataTypeMap.put(TypeEnum.LONGVARCHAR, "String"); dataTypeMap.put(TypeEnum.LONGVARBINARY, "Object"); dataTypeMap.put(TypeEnum.BINARY, "Object"); dataTypeMap.put(TypeEnum.VARBINARY, "Object"); dataTypeMap.put(TypeEnum.BLOB, "java.sql.Blob"); dataTypeMap.put(TypeEnum.CLOB, "java.sql.Clob"); sqlValueMap = new HashMap<Value, EntityDescriptor<?>>(); sqlValueMap.put(TypeEnum.BOOLEAN, BooleanExpression); sqlValueMap.put(TypeEnum.BOOLEAN, BooleanExpression); sqlValueMap.put(TypeEnum.TINYINT, IntValue); sqlValueMap.put(TypeEnum.SMALLINT, IntValue); sqlValueMap.put(TypeEnum.INTEGER, IntValue); sqlValueMap.put(TypeEnum.BIGINT, IntValue); sqlValueMap.put(TypeEnum.REAL, DoubleValue); sqlValueMap.put(TypeEnum.FLOAT, DoubleValue); sqlValueMap.put(TypeEnum.DOUBLE, DoubleValue); // sqlValueMap.put(TypeEnum.NUMERIC, "java.math.BigDecimal"); // sqlValueMap.put(TypeEnum.DECIMAL, "java.math.BigDecimal"); sqlValueMap.put(TypeEnum.TEXT, StringValue); sqlValueMap.put(TypeEnum.DATALINK, StringValue); sqlValueMap.put(TypeEnum.REF, StringValue); sqlValueMap.put(TypeEnum.DATE, DateValue); sqlValueMap.put(TypeEnum.TIME, TimeValue); sqlValueMap.put(TypeEnum.TIMESTAMP, TimestampValue); // sqlValueMap.put(TypeEnum.ARRAY, "java.sql.Array"); sqlValueMap.put(TypeEnum.CHAR, StringValue); sqlValueMap.put(TypeEnum.VARCHAR, StringValue); sqlValueMap.put(TypeEnum.LONGVARCHAR, StringValue); // sqlValueMap.put(TypeEnum.LONGVARBINARY, "Object"); // sqlValueMap.put(TypeEnum.BINARY, "Object"); // sqlValueMap.put(TypeEnum.VARBINARY, "Object"); // sqlValueMap.put(TypeEnum.BLOB, "java.sql.Blob"); // sqlValueMap.put(TypeEnum.CLOB, "java.sql.Clob"); } // //TODO complete // public static SQLExpression toSQLValue(Type type, IEntity entity) { // EntityDescriptor<?> ed = sqlValueMap.get(type); // return (SQLExpression) DataTypeUtils.createFromPersistenceString(ed, DataTypeUtils.getAsPersistenceString(entity)); // } // public static IEntity getFeatureByColumn(ColumnDeclaration column, IEntity entity) { // FeatureDescriptorEnum fdEnum = entity.wGetLanguageKit().getFeatureDescriptorEnum(); // return entity.wGet(fdEnum.valueOf(column.getFeatureName().getValue())); // } // // public static SQLExpression getFeatureSQLValue(ColumnDeclaration column, IEntity entity) { // return toSQLValue(column.getType(), getFeatureByColumn(column, entity)); // } public static SimpleName toDataType(Type type) { return ModelsEntityFactory.instance.createSimpleName(dataTypeMap.get(type.getValue())); } // private static SQLExpression toSQLExpression(List<SQLExpression> list) { // SQLEntityFactory sef = SQLEntityFactory.instance; // if (list.size() > 1) // return sef.createBooleanBinaryExpression( // list.get(0), // sef.createBooleanOperator(BooleanOperatorEnum.and), // toSQLExpression(list.subList(1, list.size())) // ); // else // return list.get(0); // } // public static SQLExpression createKeyExpression(Table table, IEntity entity) { // SQLEntityFactory sef = SQLEntityFactory.instance; // // IEntityIterator<KeyColumn> iterator = IteratorFactory.<KeyColumn>childMatcherIterator(table.getColumns()).usePattern(RDBEntityDescriptorEnum.KeyColumn); // List<SQLExpression> equalsList = new ArrayList<SQLExpression>(); // // while (iterator.hasNext()) { // KeyColumn keyColumn = iterator.next(); // IEntity child = getFeatureByColumn(keyColumn, entity); // equalsList.add(sef.createBooleanBinaryExpression( // sef.createColumnName(keyColumn.getName().getValue()), // sef.createBooleanOperator(BooleanOperatorEnum.eq), // toSQLValue(keyColumn.getType(), child) // )); // } // if (equalsList.size() == 0) // throw new IllegalArgumentException("missing primary key"); // else // return toSQLExpression(equalsList); // } }