📄 sqljdbcutil.java
字号:
if (viewClause.length() > 0) {
if (whereString.length() > 0) {
whereString.append(' ');
whereString.append(operator);
whereString.append(' ');
}
whereString.append(viewClause);
}
if (whereString.length() > 0) {
return " WHERE " + whereString.toString();
}
return "";
}
public static String makeViewWhereClause(ModelEntity modelEntity, String joinStyle) throws GenericEntityException {
if (modelEntity instanceof ModelViewEntity) {
StringBuffer whereString = new StringBuffer();
ModelViewEntity modelViewEntity = (ModelViewEntity) modelEntity;
if ("ansi".equals(joinStyle) || "ansi-no-parenthesis".equals(joinStyle)) {
// nothing to do here, all done in the JOIN clauses
} else if ("theta-oracle".equals(joinStyle) || "theta-mssql".equals(joinStyle)) {
boolean isOracleStyle = "theta-oracle".equals(joinStyle);
boolean isMssqlStyle = "theta-mssql".equals(joinStyle);
for (int i = 0; i < modelViewEntity.getViewLinksSize(); i++) {
ModelViewEntity.ModelViewLink viewLink = modelViewEntity.getViewLink(i);
ModelEntity linkEntity = modelViewEntity.getMemberModelEntity(viewLink.getEntityAlias());
ModelEntity relLinkEntity = modelViewEntity.getMemberModelEntity(viewLink.getRelEntityAlias());
if (linkEntity == null) {
throw new GenericEntityException("Link entity not found with alias: " + viewLink.getEntityAlias() + " for entity: " + modelViewEntity.getEntityName());
}
if (relLinkEntity == null) {
throw new GenericEntityException("Rel-Link entity not found with alias: " + viewLink.getRelEntityAlias() + " for entity: " + modelViewEntity.getEntityName());
}
// ModelViewEntity.ModelMemberEntity linkMemberEntity = modelViewEntity.getMemberModelMemberEntity(viewLink.getEntityAlias());
// ModelViewEntity.ModelMemberEntity relLinkMemberEntity = modelViewEntity.getMemberModelMemberEntity(viewLink.getRelEntityAlias());
for (int j = 0; j < viewLink.getKeyMapsSize(); j++) {
ModelKeyMap keyMap = viewLink.getKeyMap(j);
ModelField linkField = linkEntity.getField(keyMap.getFieldName());
ModelField relLinkField = relLinkEntity.getField(keyMap.getRelFieldName());
if (whereString.length() > 0) {
whereString.append(" AND ");
}
whereString.append(viewLink.getEntityAlias());
whereString.append(".");
whereString.append(filterColName(linkField.getColName()));
// check to see whether the left or right members are optional, if so:
// oracle: use the (+) on the optional side
// mssql: use the * on the required side
// NOTE: not testing if original table is optional, ONLY if related table is optional; otherwise things get really ugly...
// if (isOracleStyle && linkMemberEntity.getOptional()) whereString.append(" (+) ");
if (isMssqlStyle && viewLink.isRelOptional()) whereString.append("*");
whereString.append("=");
// if (isMssqlStyle && linkMemberEntity.getOptional()) whereString.append("*");
if (isOracleStyle && viewLink.isRelOptional()) whereString.append(" (+) ");
whereString.append(viewLink.getRelEntityAlias());
whereString.append(".");
whereString.append(filterColName(relLinkField.getColName()));
}
}
} else {
throw new GenericModelException("The join-style " + joinStyle + " is not yet supported");
}
if (whereString.length() > 0) {
return "(" + whereString.toString() + ")";
}
}
return "";
}
public static String makeOrderByClause(ModelEntity modelEntity, List orderBy, EntityConfigUtil.DatasourceInfo datasourceInfo) {
return makeOrderByClause(modelEntity, orderBy, false, datasourceInfo);
}
public static String makeOrderByClause(ModelEntity modelEntity, List orderBy, boolean includeTablenamePrefix, EntityConfigUtil.DatasourceInfo datasourceInfo) {
StringBuffer sql = new StringBuffer("");
String fieldPrefix = includeTablenamePrefix ? (modelEntity.getTableName(datasourceInfo) + ".") : "";
if (orderBy != null && orderBy.size() > 0) {
if (Debug.verboseOn()) Debug.logVerbose("Order by list contains: " + orderBy.size() + " entries.", module);
List orderByStrings = new LinkedList();
for (int oi = 0; oi < orderBy.size(); oi++) {
String keyName = (String) orderBy.get(oi);
String ext = null;
// check for ASC/DESC
int spaceIdx = keyName.indexOf(" ");
if (spaceIdx > 0) {
ext = keyName.substring(spaceIdx);
keyName = keyName.substring(0, spaceIdx);
}
// optional way -/+
if (keyName.startsWith("-") || keyName.startsWith("+")) {
ext = keyName.startsWith("-") ? " DESC" : " ASC";
keyName = keyName.substring(1);
}
for (int fi = 0; fi < modelEntity.getFieldsSize(); fi++) {
ModelField curField = modelEntity.getField(fi);
String fieldName = curField.getName();
if (fieldName.equals(keyName)) {
if (ext != null) {
orderByStrings.add(fieldPrefix + modelEntity.getColNameOrAlias(fieldName) + ext);
} else {
orderByStrings.add(fieldPrefix + modelEntity.getColNameOrAlias(fieldName));
}
}
}
}
if (orderByStrings.size() > 0) {
sql.append(" ORDER BY ");
Iterator iter = orderByStrings.iterator();
while (iter.hasNext()) {
String curString = (String) iter.next();
sql.append(curString);
if (iter.hasNext())
sql.append(", ");
}
}
}
if (Debug.verboseOn()) Debug.logVerbose("makeOrderByClause: " + sql.toString(), module);
return sql.toString();
}
public static String makeViewTable(ModelEntity modelEntity, EntityConfigUtil.DatasourceInfo datasourceInfo) throws GenericEntityException {
if (modelEntity instanceof ModelViewEntity) {
StringBuffer sql = new StringBuffer("(SELECT ");
List fields = modelEntity.getFieldsCopy();
if (fields.size() > 0) {
String colname = ((ModelField) fields.get(0)).getColName();
sql.append(colname);
sql.append(" AS ");
sql.append(filterColName(colname));
for (int i = 1; i < fields.size(); i++) {
colname = ((ModelField) fields.get(i)).getColName();
sql.append(", ");
sql.append(colname);
sql.append(" AS ");
sql.append(filterColName(colname));
}
}
sql.append(makeFromClause(modelEntity, datasourceInfo));
String viewWhereClause = makeViewWhereClause(modelEntity, datasourceInfo.joinStyle);
if (viewWhereClause != null && viewWhereClause.length() > 0) {
sql.append(" WHERE ");
sql.append(viewWhereClause);
}
ModelViewEntity modelViewEntity = (ModelViewEntity)modelEntity;
String groupByString = modelViewEntity.colNameString(modelViewEntity.getGroupBysCopy(), ", ", "", false);
if (UtilValidate.isNotEmpty(groupByString)) {
sql.append(" GROUP BY ");
sql.append(groupByString);
}
sql.append(")");
return sql.toString();
} else {
return modelEntity.getTableName(datasourceInfo);
}
}
public static String filterColName(String colName) {
return colName.replace('.', '_').replace('(','_').replace(')','_');
}
/* ====================================================================== */
/* ====================================================================== */
/**
* The elements (ModelFields) of the list are bound to an SQL statement
* (SQL-Processor)
*
* @param sqlP
* @param list
* @param entity
* @throws GenericEntityException
*/
public static void setValues(SQLProcessor sqlP, List list, GenericEntity entity, ModelFieldTypeReader modelFieldTypeReader) throws GenericEntityException {
for (int i = 0; i < list.size(); i++) {
ModelField curField = (ModelField) list.get(i);
setValue(sqlP, curField, entity, modelFieldTypeReader);
}
}
/**
* The elements (ModelFields) of the list are bound to an SQL statement
* (SQL-Processor), but values must not be null.
*
* @param sqlP
* @param list
* @param dummyValue
* @param modelFieldTypeReader
* @throws GenericEntityException
*/
public static void setValuesWhereClause(SQLProcessor sqlP, List list, GenericValue dummyValue, ModelFieldTypeReader modelFieldTypeReader) throws GenericEntityException {
for (int i = 0; i < list.size(); i++) {
ModelField curField = (ModelField) list.get(i);
// for where clause variables only setValue if not null...
if (dummyValue.get(curField.getName()) != null) {
setValue(sqlP, curField, dummyValue, modelFieldTypeReader);
}
}
}
/**
* Get all primary keys from the model entity and bind their values
* to the an SQL statement (SQL-Processor)
*
* @param sqlP
* @param modelEntity
* @param entity
* @param modelFieldTypeReader
* @throws GenericEntityException
*/
public static void setPkValues(SQLProcessor sqlP, ModelEntity modelEntity, GenericEntity entity, ModelFieldTypeReader modelFieldTypeReader) throws GenericEntityException {
for (int j = 0; j < modelEntity.getPksSize(); j++) {
ModelField curField = modelEntity.getPk(j);
// for where clause variables only setValue if not null...
if (entity.dangerousGetNoCheckButFast(curField) != null) {
setValue(sqlP, curField, entity, modelFieldTypeReader);
}
}
}
public static void getValue(ResultSet rs, int ind, ModelField curField, GenericEntity entity, ModelFieldTypeReader modelFieldTypeReader) throws GenericEntityException {
ModelFieldType mft = modelFieldTypeReader.getModelFieldType(curField.getType());
if (mft == null) {
throw new GenericModelException("definition fieldType " + curField.getType() + " not found, cannot getValue for field " +
entity.getEntityName() + "." + curField.getName() + ".");
}
String fieldType = mft.getJavaType();
try {
// checking to see if the object is null is really only necessary for the numbers
int typeValue = getType(fieldType);
ResultSetMetaData rsmd = rs.getMetaData();
int colType = rsmd.getColumnType(ind);
if (typeValue <= 4 || typeValue == 10 || typeValue == 11) {
switch (typeValue) {
case 1:
if (java.sql.Types.CLOB == colType) {
// Debug.logInfo("For field " + curField.getName() + " of entity " + entity.getEntityName() + " getString is a CLOB, trying getCharacterStream", module);
// if the String is empty, try to get a text input stream, this is required for some databases for larger fields, like CLOBs
/*Clob valueClob = rs.getClob(ind);
Reader valueReader = null;
if (valueClob != null) {
valueReader = valueClob.getCharacterStream();
}*/
Reader valueReader = rs.getCharacterStream(ind);
if (valueReader != null) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -