use of org.dbflute.dbmeta.DBMeta in project dbflute-core by dbflute.
the class AbstractConditionQuery method throwLikeSearchOptionNotFoundException.
protected void throwLikeSearchOptionNotFoundException(String columnDbName, String value) {
final DBMeta dbmeta = xgetDBMetaProvider().provideDBMeta(asTableDbName());
createCBExThrower().throwLikeSearchOptionNotFoundException(columnDbName, value, dbmeta);
}
use of org.dbflute.dbmeta.DBMeta in project dbflute-core by dbflute.
the class AbstractConditionQuery method setupConditionValueAndRegisterWhereClause.
protected void setupConditionValueAndRegisterWhereClause(ConditionKey key, Object value, ConditionValue cvalue, String columnDbName, ConditionOption option) {
final DBMeta dbmeta = xgetLocalDBMeta();
final ColumnInfo columnInfo = dbmeta.findColumnInfo(columnDbName);
final QueryModeProvider queryModeProvider = xcreateQueryModeProvider();
final Object filtered = filterConditionValueIfNeeds(key, value, cvalue, columnDbName, option, columnInfo);
final String propertyName = columnInfo.getPropertyName();
final String uncapPropName = initUncap(propertyName);
// if Java, it is necessary to use uncapPropName
final String location = xgetLocation(uncapPropName);
key.setupConditionValue(queryModeProvider, cvalue, filtered, location, option);
final ColumnRealName columnRealName = toColumnRealName(columnDbName);
final ColumnFunctionCipher cipher = xgetSqlClause().findColumnFunctionCipher(columnInfo);
final String usedAliasName = xgetAliasName();
xgetSqlClause().registerWhereClause(columnRealName, key, cvalue, cipher, option, usedAliasName);
}
use of org.dbflute.dbmeta.DBMeta in project dbflute-core by dbflute.
the class AbstractConditionQuery method invokeValue.
// ===================================================================================
// Reflection Invoking
// ===================
/**
* {@inheritDoc}
*/
public ConditionValue invokeValue(String columnFlexibleName) {
assertStringNotNullAndNotTrimmedEmpty("columnFlexibleName", columnFlexibleName);
final DBMeta dbmeta = xgetLocalDBMeta();
final String columnCapPropName = initCap(dbmeta.findColumnInfo(columnFlexibleName).getPropertyName());
final String methodName = "xdfget" + columnCapPropName;
final Method method = xhelpGettingCQMethod(this, methodName, (Class<?>[]) null);
if (method == null) {
throwConditionInvokingGetMethodNotFoundException(columnFlexibleName, methodName);
// unreachable
return null;
}
try {
return (ConditionValue) xhelpInvokingCQMethod(this, method, (Object[]) null);
} catch (ReflectionFailureException e) {
throwConditionInvokingGetReflectionFailureException(columnFlexibleName, methodName, e);
// unreachable
return null;
}
}
use of org.dbflute.dbmeta.DBMeta in project dbflute-core by dbflute.
the class AbstractConditionQuery method registerOuterJoin.
// ===================================================================================
// Outer Join
// ==========
/**
* Register outer-join. <br>
* Optional info, fixed condition and fixed in-line, are resolved in this method.
* @param foreignCQ The condition-query for foreign table. (NotNull)
* @param joinOnResourceMap The resource map of join condition on on-clause. (NotNull)
* @param foreignPropertyName The property name of foreign relation corresponding to this join. (NotNull)
*/
protected void registerOuterJoin(ConditionQuery foreignCQ, Map<String, String> joinOnResourceMap, String foreignPropertyName) {
final DBMeta dbmeta = xgetLocalDBMeta();
final ForeignInfo foreignInfo = dbmeta.findForeignInfo(foreignPropertyName);
doRegisterOuterJoin(foreignCQ, joinOnResourceMap, foreignPropertyName, foreignInfo);
}
use of org.dbflute.dbmeta.DBMeta in project dbflute-core by dbflute.
the class AbstractConditionQuery method registerExistsReferrer.
protected void registerExistsReferrer(final ConditionQuery subQuery, String columnDbName, String relatedColumnDbName, String propertyName, String referrerPropertyName, boolean notExists) {
assertSubQueryNotNull("ExistsReferrer", relatedColumnDbName, subQuery);
if (subQuery.xgetSqlClause().isUseInScopeSubQueryForExistsReferrer()) {
registerInScopeRelation(subQuery, columnDbName, relatedColumnDbName, propertyName, referrerPropertyName, notExists);
return;
}
final SubQueryPath subQueryPath = new SubQueryPath(xgetLocation(propertyName));
final GeneralColumnRealNameProvider localRealNameProvider = new GeneralColumnRealNameProvider();
final int subQueryLevel = subQuery.xgetSqlClause().getSubQueryLevel();
final SqlClause subQueryClause = subQuery.xgetSqlClause();
final String subQueryIdentity = propertyName + "[" + subQueryLevel + "]";
final ColumnSqlNameProvider subQuerySqlNameProvider = dbName -> subQuery.toColumnSqlName(dbName);
final DBMeta subQueryDBMeta = findDBMeta(subQuery.asTableDbName());
final GearedCipherManager cipherManager = xgetSqlClause().getGearedCipherManager();
final ExistsReferrer existsReferrer = new ExistsReferrer(subQueryPath, localRealNameProvider, subQuerySqlNameProvider, subQueryLevel, subQueryClause, subQueryIdentity, subQueryDBMeta, cipherManager);
final String correlatedFixedCondition = xbuildReferrerCorrelatedFixedCondition(subQuery, referrerPropertyName);
final String existsOption = notExists ? "not" : null;
final String clause = existsReferrer.buildExistsReferrer(columnDbName, relatedColumnDbName, correlatedFixedCondition, existsOption);
// /= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// Exists -> possible to be inner
// NotExists -> no way to be inner
//
// for example, the following SQL is no way to be inner
// (suppose if PURCHASE refers WITHDRAWAL)
//
// select mb.MEMBER_ID, mb.MEMBER_NAME
// , mb.MEMBER_STATUS_CODE, wd.MEMBER_ID as WD_MEMBER_ID
// from MEMBER mb
// left outer join MEMBER_WITHDRAWAL wd on mb.MEMBER_ID = wd.MEMBER_ID
// where not exists (select pc.PURCHASE_ID
// from PURCHASE pc
// where pc.MEMBER_ID = wd.MEMBER_ID
// )
// order by mb.MEMBER_ID
// = = = = = = = = = =/
// but 'exists' allowed
final boolean noWayInner = notExists;
registerWhereClause(clause, noWayInner);
}
Aggregations