Пример #1
0
 private void checkDefaultReferencesTable(Expression defaultExpression) {
   if (defaultExpression == null) {
     return;
   }
   HashSet<DbObject> dependencies = New.hashSet();
   ExpressionVisitor visitor = ExpressionVisitor.getDependenciesVisitor(dependencies);
   defaultExpression.isEverything(visitor);
   if (dependencies.contains(table)) {
     throw DbException.get(ErrorCode.COLUMN_IS_REFERENCED_1, defaultExpression.getSQL());
   }
 }
Пример #2
0
 @Override
 public boolean isEverything(ExpressionVisitor visitor) {
   switch (visitor.getType()) {
     case ExpressionVisitor.OPTIMIZABLE_MIN_MAX_COUNT_ALL:
       return false;
     case ExpressionVisitor.READONLY:
     case ExpressionVisitor.DETERMINISTIC:
     case ExpressionVisitor.QUERY_COMPARABLE:
       return true;
     case ExpressionVisitor.INDEPENDENT:
       return this.queryLevel < visitor.getQueryLevel();
     case ExpressionVisitor.EVALUATABLE:
       // if the current value is known (evaluatable set)
       // or if this columns belongs to a 'higher level' query and is
       // therefore just a parameter
       if (database.getSettings().nestedJoins) {
         if (visitor.getQueryLevel() < this.queryLevel) {
           return true;
         }
         if (getTableFilter() == null) {
           return false;
         }
         return getTableFilter().isEvaluatable();
       }
       return evaluatable || visitor.getQueryLevel() < this.queryLevel;
     case ExpressionVisitor.SET_MAX_DATA_MODIFICATION_ID:
       visitor.addDataModificationId(column.getTable().getMaxDataModificationId());
       return true;
     case ExpressionVisitor.NOT_FROM_RESOLVER:
       return columnResolver != visitor.getResolver();
     case ExpressionVisitor.GET_DEPENDENCIES:
       if (column != null) {
         visitor.addDependency(column.getTable());
       }
       return true;
     case ExpressionVisitor.GET_COLUMNS:
       visitor.addColumn(column);
       return true;
     default:
       throw DbException.throwInternalError("type=" + visitor.getType());
   }
 }