コード例 #1
0
ファイル: ExpressionColumn.java プロジェクト: zhoupan/Lealone
 @Override
 public String getAlias() {
   if (column != null) {
     return column.getName();
   }
   if (tableAlias != null) {
     return tableAlias + "." + columnName;
   }
   return columnName;
 }
コード例 #2
0
ファイル: ExpressionColumn.java プロジェクト: zhoupan/Lealone
  @Override
  public void mapColumns(ColumnResolver resolver, int level) {
    if (select == null) select = (Select) resolver.getSelect();

    if (resolver instanceof TableFilter
        && resolver.getTableFilter().getTable().supportsColumnFamily()) {
      Table t = resolver.getTableFilter().getTable();

      // if (!t.isStatic() && t.getRowKeyName().equalsIgnoreCase(columnName)) {
      // if (columnFamilyName != null) {
      // schemaName = tableAlias;
      // tableAlias = columnFamilyName;
      // columnFamilyName = null;
      // }
      // if (tableAlias != null && !database.equalsIdentifiers(tableAlias,
      // resolver.getTableAlias())) {
      // return;
      // }
      // if (schemaName != null && !database.equalsIdentifiers(schemaName,
      // resolver.getSchemaName())) {
      // return;
      // }
      // mapColumn(resolver, t.getRowKeyColumn(), level);
      // return;
      // }

      if (database.equalsIdentifiers(Column.ROWKEY, columnName)) {
        Column col = t.getRowKeyColumn();
        if (col != null) {
          mapColumn(resolver, col, level);
          return;
        }
      }
      if (resolver.getSelect() == null) {
        Column c = t.getColumn(columnName);
        mapColumn(resolver, c, level);
        return;
      }

      String tableAlias = this.tableAlias;
      boolean useAlias = false;
      // 当columnFamilyName不存在时,有可能是想使用简化的tableAlias.columnName语法
      if (columnFamilyName != null && !t.doesColumnFamilyExist(columnFamilyName)) {
        // 不替换原有的tableAlias,因为有可能在另一个table中存在这样的columnFamilyName
        tableAlias = columnFamilyName;

        if (!t.doesColumnExist(columnName)) return;

        useAlias = true;
      }

      if (tableAlias != null && !database.equalsIdentifiers(tableAlias, resolver.getTableAlias())) {
        return;
      }
      if (schemaName != null && !database.equalsIdentifiers(schemaName, resolver.getSchemaName())) {
        return;
      }

      String fullColumnName;
      if (useAlias || columnFamilyName == null) fullColumnName = columnName;
      else fullColumnName = t.getFullColumnName(columnFamilyName, columnName);

      if (t.doesColumnExist(fullColumnName)) {
        Column c = t.getColumn(fullColumnName);
        mapColumn(resolver, c, level);
        return;
      }
    } else {
      if (columnFamilyName != null) {
        schemaName = tableAlias;
        tableAlias = columnFamilyName;
        columnFamilyName = null;
      }
    }

    if (tableAlias != null && !database.equalsIdentifiers(tableAlias, resolver.getTableAlias())) {
      return;
    }
    if (schemaName != null && !database.equalsIdentifiers(schemaName, resolver.getSchemaName())) {
      return;
    }
    for (Column col : resolver.getColumns()) {
      String n = col.getName();
      if (database.equalsIdentifiers(columnName, n)) {
        mapColumn(resolver, col, level);
        return;
      }
    }
    if (database.equalsIdentifiers(Column.ROWID, columnName)) {
      Column col = resolver.getRowIdColumn();
      if (col != null) {
        mapColumn(resolver, col, level);
        return;
      }
    }
    Column[] columns = resolver.getSystemColumns();
    for (int i = 0; columns != null && i < columns.length; i++) {
      Column col = columns[i];
      if (database.equalsIdentifiers(columnName, col.getName())) {
        mapColumn(resolver, col, level);
        return;
      }
    }
  }
コード例 #3
0
ファイル: ExpressionColumn.java プロジェクト: zhoupan/Lealone
 @Override
 public String getColumnName() {
   return columnName != null ? columnName : column.getName();
 }
コード例 #4
0
ファイル: CreateTable.java プロジェクト: zhoupan/Lealone
 @Override
 public int update() {
   if (!transactional) {
     session.commit(true);
   }
   Database db = session.getDatabase();
   if (!db.isPersistent()) {
     data.persistIndexes = false;
   }
   if (getSchema().findTableOrView(session, data.tableName) != null) {
     if (ifNotExists) {
       return 0;
     }
     throw DbException.get(ErrorCode.TABLE_OR_VIEW_ALREADY_EXISTS_1, data.tableName);
   }
   if (asQuery != null) {
     asQuery.prepare();
     if (data.columns.isEmpty()) {
       generateColumnsFromQuery();
     } else if (data.columns.size() != asQuery.getColumnCount()) {
       throw DbException.get(ErrorCode.COLUMN_COUNT_DOES_NOT_MATCH);
     }
   }
   if (pkColumns != null) {
     for (Column c : data.columns) {
       for (IndexColumn idxCol : pkColumns) {
         if (c.getName().equals(idxCol.columnName)) {
           c.setNullable(false);
         }
       }
     }
   }
   data.id = getObjectId();
   data.create = create;
   data.session = session;
   boolean isSessionTemporary = data.temporary && !data.globalTemporary;
   if (!isSessionTemporary) {
     db.lockMeta(session);
   }
   Table table = createTable(data);
   ArrayList<Sequence> sequences = New.arrayList();
   for (Column c : data.columns) {
     if (c.isAutoIncrement()) {
       int objId = getObjectId();
       c.convertAutoIncrementToSequence(session, getSchema(), objId, data.temporary);
     }
     Sequence seq = c.getSequence();
     if (seq != null) {
       sequences.add(seq);
     }
   }
   table.setComment(comment);
   if (isSessionTemporary) {
     if (onCommitDrop) {
       table.setOnCommitDrop(true);
     }
     if (onCommitTruncate) {
       table.setOnCommitTruncate(true);
     }
     session.addLocalTempTable(table);
   } else {
     db.lockMeta(session);
     db.addSchemaObject(session, table);
   }
   try {
     for (Column c : data.columns) {
       c.prepareExpression(session);
     }
     for (Sequence sequence : sequences) {
       table.addSequence(sequence);
     }
     for (DefineCommand command : constraintCommands) {
       command.setTransactional(transactional);
       command.update();
     }
     if (asQuery != null) {
       Insert insert = null;
       insert = new Insert(session);
       insert.setSortedInsertMode(sortedInsertMode);
       insert.setQuery(asQuery);
       insert.setTable(table);
       insert.setInsertFromSelect(true);
       insert.prepare();
       insert.update();
     }
   } catch (DbException e) {
     db.checkPowerOff();
     db.removeSchemaObject(session, table);
     if (!transactional) {
       session.commit(true);
     }
     throw e;
   }
   return 0;
 }