| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 DatabaseSync::~DatabaseSync() | 67 DatabaseSync::~DatabaseSync() |
| 68 { | 68 { |
| 69 ASSERT(m_executionContext->isContextThread()); | 69 ASSERT(m_executionContext->isContextThread()); |
| 70 } | 70 } |
| 71 | 71 |
| 72 PassRefPtr<DatabaseBackendSync> DatabaseSync::backend() | 72 PassRefPtr<DatabaseBackendSync> DatabaseSync::backend() |
| 73 { | 73 { |
| 74 return this; | 74 return this; |
| 75 } | 75 } |
| 76 | 76 |
| 77 void DatabaseSync::changeVersion(const String& oldVersion, const String& newVers
ion, PassRefPtr<SQLTransactionSyncCallback> changeVersionCallback, ExceptionStat
e& es) | 77 void DatabaseSync::changeVersion(const String& oldVersion, const String& newVers
ion, PassRefPtr<SQLTransactionSyncCallback> changeVersionCallback, ExceptionStat
e& exceptionState) |
| 78 { | 78 { |
| 79 ASSERT(m_executionContext->isContextThread()); | 79 ASSERT(m_executionContext->isContextThread()); |
| 80 | 80 |
| 81 if (sqliteDatabase().transactionInProgress()) { | 81 if (sqliteDatabase().transactionInProgress()) { |
| 82 reportChangeVersionResult(1, SQLError::DATABASE_ERR, 0); | 82 reportChangeVersionResult(1, SQLError::DATABASE_ERR, 0); |
| 83 setLastErrorMessage("unable to changeVersion from within a transaction")
; | 83 setLastErrorMessage("unable to changeVersion from within a transaction")
; |
| 84 es.throwUninformativeAndGenericDOMException(SQLDatabaseError); | 84 exceptionState.throwUninformativeAndGenericDOMException(SQLDatabaseError
); |
| 85 return; | 85 return; |
| 86 } | 86 } |
| 87 | 87 |
| 88 RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, ch
angeVersionCallback, false); | 88 RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, ch
angeVersionCallback, false); |
| 89 transaction->begin(es); | 89 transaction->begin(exceptionState); |
| 90 if (es.hadException()) { | 90 if (exceptionState.hadException()) { |
| 91 ASSERT(!lastErrorMessage().isEmpty()); | 91 ASSERT(!lastErrorMessage().isEmpty()); |
| 92 return; | 92 return; |
| 93 } | 93 } |
| 94 | 94 |
| 95 String actualVersion; | 95 String actualVersion; |
| 96 if (!getVersionFromDatabase(actualVersion)) { | 96 if (!getVersionFromDatabase(actualVersion)) { |
| 97 reportChangeVersionResult(2, SQLError::UNKNOWN_ERR, sqliteDatabase().las
tError()); | 97 reportChangeVersionResult(2, SQLError::UNKNOWN_ERR, sqliteDatabase().las
tError()); |
| 98 setLastErrorMessage("unable to read the current version", sqliteDatabase
().lastError(), sqliteDatabase().lastErrorMsg()); | 98 setLastErrorMessage("unable to read the current version", sqliteDatabase
().lastError(), sqliteDatabase().lastErrorMsg()); |
| 99 es.throwDOMException(UnknownError, SQLError::unknownErrorMessage); | 99 exceptionState.throwDOMException(UnknownError, SQLError::unknownErrorMes
sage); |
| 100 return; | 100 return; |
| 101 } | 101 } |
| 102 | 102 |
| 103 if (actualVersion != oldVersion) { | 103 if (actualVersion != oldVersion) { |
| 104 reportChangeVersionResult(3, SQLError::VERSION_ERR, 0); | 104 reportChangeVersionResult(3, SQLError::VERSION_ERR, 0); |
| 105 setLastErrorMessage("current version of the database and `oldVersion` ar
gument do not match"); | 105 setLastErrorMessage("current version of the database and `oldVersion` ar
gument do not match"); |
| 106 es.throwDOMException(VersionError, SQLError::versionErrorMessage); | 106 exceptionState.throwDOMException(VersionError, SQLError::versionErrorMes
sage); |
| 107 return; | 107 return; |
| 108 } | 108 } |
| 109 | 109 |
| 110 | 110 |
| 111 transaction->execute(es); | 111 transaction->execute(exceptionState); |
| 112 if (es.hadException()) { | 112 if (exceptionState.hadException()) { |
| 113 ASSERT(!lastErrorMessage().isEmpty()); | 113 ASSERT(!lastErrorMessage().isEmpty()); |
| 114 return; | 114 return; |
| 115 } | 115 } |
| 116 | 116 |
| 117 if (!setVersionInDatabase(newVersion)) { | 117 if (!setVersionInDatabase(newVersion)) { |
| 118 reportChangeVersionResult(4, SQLError::UNKNOWN_ERR, sqliteDatabase().las
tError()); | 118 reportChangeVersionResult(4, SQLError::UNKNOWN_ERR, sqliteDatabase().las
tError()); |
| 119 setLastErrorMessage("unable to set the new version", sqliteDatabase().la
stError(), sqliteDatabase().lastErrorMsg()); | 119 setLastErrorMessage("unable to set the new version", sqliteDatabase().la
stError(), sqliteDatabase().lastErrorMsg()); |
| 120 es.throwDOMException(UnknownError, SQLError::unknownErrorMessage); | 120 exceptionState.throwDOMException(UnknownError, SQLError::unknownErrorMes
sage); |
| 121 return; | 121 return; |
| 122 } | 122 } |
| 123 | 123 |
| 124 transaction->commit(es); | 124 transaction->commit(exceptionState); |
| 125 if (es.hadException()) { | 125 if (exceptionState.hadException()) { |
| 126 ASSERT(!lastErrorMessage().isEmpty()); | 126 ASSERT(!lastErrorMessage().isEmpty()); |
| 127 setCachedVersion(oldVersion); | 127 setCachedVersion(oldVersion); |
| 128 return; | 128 return; |
| 129 } | 129 } |
| 130 | 130 |
| 131 reportChangeVersionResult(0, -1, 0); // OK | 131 reportChangeVersionResult(0, -1, 0); // OK |
| 132 | 132 |
| 133 setExpectedVersion(newVersion); | 133 setExpectedVersion(newVersion); |
| 134 setLastErrorMessage(""); | 134 setLastErrorMessage(""); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void DatabaseSync::transaction(PassRefPtr<SQLTransactionSyncCallback> callback,
ExceptionState& es) | 137 void DatabaseSync::transaction(PassRefPtr<SQLTransactionSyncCallback> callback,
ExceptionState& exceptionState) |
| 138 { | 138 { |
| 139 runTransaction(callback, false, es); | 139 runTransaction(callback, false, exceptionState); |
| 140 } | 140 } |
| 141 | 141 |
| 142 void DatabaseSync::readTransaction(PassRefPtr<SQLTransactionSyncCallback> callba
ck, ExceptionState& es) | 142 void DatabaseSync::readTransaction(PassRefPtr<SQLTransactionSyncCallback> callba
ck, ExceptionState& exceptionState) |
| 143 { | 143 { |
| 144 runTransaction(callback, true, es); | 144 runTransaction(callback, true, exceptionState); |
| 145 } | 145 } |
| 146 | 146 |
| 147 void DatabaseSync::rollbackTransaction(PassRefPtr<SQLTransactionSync> transactio
n) | 147 void DatabaseSync::rollbackTransaction(PassRefPtr<SQLTransactionSync> transactio
n) |
| 148 { | 148 { |
| 149 ASSERT(!lastErrorMessage().isEmpty()); | 149 ASSERT(!lastErrorMessage().isEmpty()); |
| 150 transaction->rollback(); | 150 transaction->rollback(); |
| 151 setLastErrorMessage(""); | 151 setLastErrorMessage(""); |
| 152 return; | 152 return; |
| 153 } | 153 } |
| 154 | 154 |
| 155 void DatabaseSync::runTransaction(PassRefPtr<SQLTransactionSyncCallback> callbac
k, bool readOnly, ExceptionState& es) | 155 void DatabaseSync::runTransaction(PassRefPtr<SQLTransactionSyncCallback> callbac
k, bool readOnly, ExceptionState& exceptionState) |
| 156 { | 156 { |
| 157 ASSERT(m_executionContext->isContextThread()); | 157 ASSERT(m_executionContext->isContextThread()); |
| 158 | 158 |
| 159 if (sqliteDatabase().transactionInProgress()) { | 159 if (sqliteDatabase().transactionInProgress()) { |
| 160 setLastErrorMessage("unable to start a transaction from within a transac
tion"); | 160 setLastErrorMessage("unable to start a transaction from within a transac
tion"); |
| 161 es.throwUninformativeAndGenericDOMException(SQLDatabaseError); | 161 exceptionState.throwUninformativeAndGenericDOMException(SQLDatabaseError
); |
| 162 return; | 162 return; |
| 163 } | 163 } |
| 164 | 164 |
| 165 RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, ca
llback, readOnly); | 165 RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, ca
llback, readOnly); |
| 166 transaction->begin(es); | 166 transaction->begin(exceptionState); |
| 167 if (es.hadException()) { | 167 if (exceptionState.hadException()) { |
| 168 rollbackTransaction(transaction); | 168 rollbackTransaction(transaction); |
| 169 return; | 169 return; |
| 170 } | 170 } |
| 171 | 171 |
| 172 transaction->execute(es); | 172 transaction->execute(exceptionState); |
| 173 if (es.hadException()) { | 173 if (exceptionState.hadException()) { |
| 174 rollbackTransaction(transaction); | 174 rollbackTransaction(transaction); |
| 175 return; | 175 return; |
| 176 } | 176 } |
| 177 | 177 |
| 178 transaction->commit(es); | 178 transaction->commit(exceptionState); |
| 179 if (es.hadException()) { | 179 if (exceptionState.hadException()) { |
| 180 rollbackTransaction(transaction); | 180 rollbackTransaction(transaction); |
| 181 return; | 181 return; |
| 182 } | 182 } |
| 183 | 183 |
| 184 setLastErrorMessage(""); | 184 setLastErrorMessage(""); |
| 185 } | 185 } |
| 186 | 186 |
| 187 void DatabaseSync::markAsDeletedAndClose() | 187 void DatabaseSync::markAsDeletedAndClose() |
| 188 { | 188 { |
| 189 // FIXME: need to do something similar to closeImmediately(), but in a sync
way | 189 // FIXME: need to do something similar to closeImmediately(), but in a sync
way |
| (...skipping 25 matching lines...) Expand all Loading... |
| 215 ASSERT(m_executionContext->isContextThread()); | 215 ASSERT(m_executionContext->isContextThread()); |
| 216 | 216 |
| 217 if (!opened()) | 217 if (!opened()) |
| 218 return; | 218 return; |
| 219 | 219 |
| 220 logErrorMessage("forcibly closing database"); | 220 logErrorMessage("forcibly closing database"); |
| 221 closeDatabase(); | 221 closeDatabase(); |
| 222 } | 222 } |
| 223 | 223 |
| 224 } // namespace WebCore | 224 } // namespace WebCore |
| OLD | NEW |