public void run() { try { Session sysSession = sessionManager.newSysSession(); Statement checkpoint = ParserCommand.getAutoCheckpointStatement(Database.this); sysSession.executeCompiledStatement(checkpoint, ValuePool.emptyObjectArray, 0); sysSession.commit(false); sysSession.close(); waiting = false; } catch (Throwable e) { // ignore exceptions // may be InterruptedException or IOException } }
/** Closes this connection. */ private void close() { if (session != null) { session.close(); } session = null; // fredt@user - closing the socket is to stop this thread try { socket.close(); } catch (IOException e) { } synchronized (server.serverConnSet) { server.serverConnSet.remove(this); } }
/** Used by pooled connections to close the existing SQL session and open a new one. */ private Result resetSession() { Result resultOut; if (!server.isSilent()) { server.printWithThread(mThread + ":trying to connect user " + user); } try { session.close(); session = DatabaseManager.newSession(dbID, user, password); resultOut = new Result(ResultConstants.UPDATECOUNT); resultOut.databaseID = session.getDatabase().databaseID; resultOut.sessionID = session.getId(); } catch (HsqlException e) { session = null; resultOut = new Result(e, null); } return resultOut; }
Result getResult(Session session) { boolean startTransaction = false; if (this.isExplain) { return Result.newSingleColumnStringResult("OPERATION", describe(session)); } switch (type) { // cursor case StatementTypes.ALLOCATE_CURSOR: case StatementTypes.ALLOCATE_DESCRIPTOR: return Result.updateZeroResult; // case StatementTypes.COMMIT_WORK: { try { boolean chain = parameters != null; session.commit(chain); return Result.updateZeroResult; } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.DEALLOCATE_DESCRIPTOR: case StatementTypes.DEALLOCATE_PREPARE: return Result.updateZeroResult; case StatementTypes.DISCONNECT: session.close(); return Result.updateZeroResult; // case StatementTypes.DYNAMIC_CLOSE: case StatementTypes.DYNAMIC_DELETE_CURSOR: case StatementTypes.DYNAMIC_FETCH: case StatementTypes.DYNAMIC_OPEN: // case StatementTypes.FETCH: case StatementTypes.FREE_LOCATOR: case StatementTypes.GET_DESCRIPTOR: case StatementTypes.HOLD_LOCATOR: // case StatementTypes.OPEN: case StatementTypes.PREPARABLE_DYNAMIC_DELETE_CURSOR: case StatementTypes.PREPARABLE_DYNAMIC_UPDATE_CURSOR: case StatementTypes.PREPARE: return Result.updateZeroResult; case StatementTypes.TRANSACTION_LOCK_TABLE: { return Result.updateZeroResult; } case StatementTypes.RELEASE_SAVEPOINT: { String savepoint = (String) parameters[0]; try { session.releaseSavepoint(savepoint); return Result.updateZeroResult; } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.ROLLBACK_WORK: { boolean chain = ((Boolean) parameters[0]).booleanValue(); session.rollback(chain); return Result.updateZeroResult; } case StatementTypes.ROLLBACK_SAVEPOINT: { String savepoint = (String) parameters[0]; try { session.rollbackToSavepoint(savepoint); return Result.updateZeroResult; } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.SAVEPOINT: { String savepoint = (String) parameters[0]; session.savepoint(savepoint); return Result.updateZeroResult; } case StatementTypes.SET_CATALOG: { String name; try { name = (String) expressions[0].getValue(session); name = (String) Type.SQL_VARCHAR.trim(session, name, ' ', true, true); if (session.database.getCatalogName().name.equals(name)) { return Result.updateZeroResult; } return Result.newErrorResult(Error.error(ErrorCode.X_3D000), sql); } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.SET_CONNECTION: case StatementTypes.SET_CONSTRAINT: case StatementTypes.SET_DESCRIPTOR: return Result.updateZeroResult; case StatementTypes.SET_TIME_ZONE: { Object value = null; if (expressions[0].getType() == OpTypes.VALUE && expressions[0].getConstantValueNoCheck(session) == null) { session.timeZoneSeconds = session.sessionTimeZoneSeconds; return Result.updateZeroResult; } try { value = expressions[0].getValue(session); } catch (HsqlException e) { } if (value instanceof Result) { Result result = (Result) value; if (result.isData()) { Object[] data = (Object[]) result.getNavigator().getNext(); boolean single = !result.getNavigator().next(); if (single && data != null && data[0] != null) { value = data[0]; result.getNavigator().close(); } else { result.getNavigator().close(); return Result.newErrorResult(Error.error(ErrorCode.X_22009), sql); } } else { return Result.newErrorResult(Error.error(ErrorCode.X_22009), sql); } } else { if (value == null) { return Result.newErrorResult(Error.error(ErrorCode.X_22009), sql); } } long seconds = ((IntervalSecondData) value).getSeconds(); if (-DTIType.timezoneSecondsLimit <= seconds && seconds <= DTIType.timezoneSecondsLimit) { session.timeZoneSeconds = (int) seconds; return Result.updateZeroResult; } return Result.newErrorResult(Error.error(ErrorCode.X_22009), sql); } case StatementTypes.SET_NAMES: return Result.updateZeroResult; case StatementTypes.SET_PATH: return Result.updateZeroResult; case StatementTypes.SET_ROLE: { String name; Grantee role = null; try { name = (String) expressions[0].getValue(session); if (name != null) { name = (String) Type.SQL_VARCHAR.trim(session, name, ' ', true, true); role = session.database.granteeManager.getRole(name); } } catch (HsqlException e) { return Result.newErrorResult(Error.error(ErrorCode.X_0P000), sql); } if (session.isInMidTransaction()) { return Result.newErrorResult(Error.error(ErrorCode.X_25001), sql); } if (role == null) { session.setRole(null); } if (session.getGrantee().hasRole(role)) { session.setRole(role); return Result.updateZeroResult; } else { return Result.newErrorResult(Error.error(ErrorCode.X_0P000), sql); } } case StatementTypes.SET_SCHEMA: { String name; HsqlName schema; try { if (expressions == null) { name = ((HsqlName) parameters[0]).name; } else { name = (String) expressions[0].getValue(session); } name = (String) Type.SQL_VARCHAR.trim(session, name, ' ', true, true); schema = session.database.schemaManager.getSchemaHsqlName(name); session.setSchema(schema.name); return Result.updateZeroResult; } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.SET_SESSION_AUTHORIZATION: { if (session.isInMidTransaction()) { return Result.newErrorResult(Error.error(ErrorCode.X_25001), sql); } try { String user; String password = null; user = (String) expressions[0].getValue(session); user = (String) Type.SQL_VARCHAR.trim(session, user, ' ', true, true); if (expressions[1] != null) { password = (String) expressions[1].getValue(session); } User userObject; if (password == null) { userObject = session.database.userManager.get(user); } else { userObject = session.database.getUserManager().getUser(user, password); } if (userObject == null) { throw Error.error(ErrorCode.X_28501); } sql = userObject.getConnectUserSQL(); if (userObject == session.getGrantee()) { return Result.updateZeroResult; } if (session.getGrantee().canChangeAuthorisation()) { session.setUser((User) userObject); session.setRole(null); session.resetSchema(); return Result.updateZeroResult; } /** @todo may need different error code */ throw Error.error(ErrorCode.X_28000); } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.SET_SESSION_CHARACTERISTICS: { try { if (parameters[0] != null) { boolean readonly = ((Boolean) parameters[0]).booleanValue(); session.setReadOnlyDefault(readonly); } if (parameters[1] != null) { int level = ((Integer) parameters[1]).intValue(); session.setIsolationDefault(level); } return Result.updateZeroResult; } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.SET_COLLATION: return Result.updateZeroResult; case StatementTypes.SET_TRANSFORM_GROUP: return Result.updateZeroResult; case StatementTypes.START_TRANSACTION: startTransaction = true; // fall through case StatementTypes.SET_TRANSACTION: { try { if (parameters[0] != null) { boolean readonly = ((Boolean) parameters[0]).booleanValue(); session.setReadOnly(readonly); } if (parameters[1] != null) { int level = ((Integer) parameters[1]).intValue(); session.setIsolation(level); } if (startTransaction) { session.startTransaction(); } return Result.updateZeroResult; } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } // case StatementTypes.SET_SESSION_AUTOCOMMIT: { boolean mode = ((Boolean) parameters[0]).booleanValue(); try { session.setAutoCommit(mode); return Result.updateZeroResult; } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.DECLARE_VARIABLE: { ColumnSchema variable = (ColumnSchema) parameters[0]; try { session.sessionContext.addSessionVariable(variable); return Result.updateZeroResult; } catch (HsqlException e) { return Result.newErrorResult(e, sql); } } case StatementTypes.SET_SESSION_RESULT_MAX_ROWS: { int size = ((Integer) parameters[0]).intValue(); session.setSQLMaxRows(size); return Result.updateZeroResult; } case StatementTypes.SET_SESSION_RESULT_MEMORY_ROWS: { int size = ((Integer) parameters[0]).intValue(); session.setResultMemoryRowCount(size); return Result.updateZeroResult; } default: throw Error.runtimeError(ErrorCode.U_S0500, "CompiledStateemntCommand"); } }