/** * Executes a SELECT statement. It is assumed that the argument is of the correct type. * * @param cs a CompiledStatement of type CompiledStatement.SELECT * @throws HsqlException if a database access error occurs * @return the result of executing the statement */ private Result executeSelectStatement(CompiledStatement cs) throws HsqlException { Select select = cs.select; Result result; if (select.sIntoTable != null) { // session level user rights session.checkDDLWrite(); if (session.getDatabase().findUserTable(session, select.sIntoTable.name) != null || session.getDatabase().dInfo.getSystemTable(session, select.sIntoTable.name) != null) { throw Trace.error(Trace.TABLE_ALREADY_EXISTS, select.sIntoTable.name); } result = select.getResult(session.getMaxRows(), session); result = session.dbCommandInterpreter.processSelectInto( result, select.sIntoTable, select.intoType); session.getDatabase().setMetaDirty(false); } else { result = select.getResult(session.getMaxRows(), session); } return result; }
/** * Drops the specified user-defined view or table from this Database object. * * <p>The process of dropping a table or view includes: * * <OL> * <LI>checking that the specified Session's currently connected User has the right to perform * this operation and refusing to proceed if not by throwing. * <LI>checking for referential constraints that conflict with this operation and refusing to * proceed if they exist by throwing. * <LI>removing the specified Table from this Database object. * <LI>removing any exported foreign keys Constraint objects held by any tables referenced by * the table to be dropped. This is especially important so that the dropped Table ceases to * be referenced, eventually allowing its full garbage collection. * <LI> * </OL> * * <p> * * @param name of the table or view to drop * @param ifExists if true and if the Table to drop does not exist, fail silently, else throw * @param isView true if the name argument refers to a View * @param session the connected context in which to perform this operation * @throws HsqlException if any of the checks listed above fail */ void dropTable(Session session, String name, boolean ifExists, boolean isView) throws HsqlException { Table toDrop = null; int dropIndex = -1; for (int i = 0; i < tTable.size(); i++) { toDrop = (Table) tTable.get(i); if (toDrop.equals(session, name) && isView == toDrop.isView()) { dropIndex = i; break; } else { toDrop = null; } } if (dropIndex == -1) { if (ifExists) { return; } else { throw Trace.error(isView ? Trace.VIEW_NOT_FOUND : Trace.TABLE_NOT_FOUND, name); } } if (!toDrop.isTemp()) { session.checkDDLWrite(); } if (isView) { checkViewIsInView((View) toDrop); } else { checkTableIsReferenced(toDrop); checkTableIsInView(toDrop.tableName.name); } tTable.remove(dropIndex); removeExportedKeys(toDrop); userManager.removeDbObject(toDrop.getName()); triggerNameList.removeOwner(toDrop.tableName); indexNameList.removeOwner(toDrop.tableName); constraintNameList.removeOwner(toDrop.tableName); toDrop.dropTriggers(); toDrop.drop(); session.setScripting(!toDrop.isTemp()); session.commit(); }