-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Notamos um comportamento diferente nos seguintes cenários:
Segue o seguinte exemplo:
problemaTransacao: function (params, req, res) {
var database = require('database')
var db = database.createDbInstance(getBitcodeConfig('database')())
var drop = 'DROP TABLE IF EXISTS tabela_teste'
var create = 'CREATE TABLE tabela_teste (id serial, descricao text)'
var retorno = db.executeInSingleTransaction(function (tx) {
console.log('--> 1. DROP')
tx.execute(drop)
console.log('--> 2. CREATE')
tx.execute(create)
console.log('--> 3. CREATE DUPLICADO')
tx.execute(create)
console.log('--> 4. RETORNO')
console.log('--> 5. RETORNO JSON', retorno)
res.json({
retornou: true
})
})
if(retorno.error) {
...
}
},
Esse código não lança uma exceção de erro, o erro é retornado na execução da função.
Ao executar o código abaixo (o mesmo código, porém sem o uso do executeInSingleTransaction):
problemaTransacao2: function (params, req, res) {
var database = require('database')
var db = database.createDbInstance(getBitcodeConfig('database')())
var drop = 'DROP TABLE IF EXISTS tabela_teste'
var create = 'CREATE TABLE tabela_teste (id serial, descricao text)'
console.log('--> 1. DROP')
db.execute(drop)
console.log('--> 2. CREATE')
db.execute(create)
console.log('--> 3. CREATE DUPLICADO')
var retorno = db.execute(create)
console.log('--> 4. RETORNO')
console.log('--> 5. RETORNO JSON', retorno)
res.json({
retornou: true
})
}
Uma exceção é lançada, o que nos dá um comportamento diferente do primeiro código. Demoramos um tempo para entender que o primero código não lançava uma exceção, mas sim retornava o erro no retorno da execução, pois ao utilizar diariamente o database, estamos acostumados com o lançamento das exceções.
Acredito que para uma padronização da plataforma, seria legal que a saída das duas execuções fosse a mesma, ou lançar exceções, ou devolver os erros no retorno das execuções das funções. Isso facilita o racíocinio de quem está desenvolvendo, pois a plataforma tem um comportamento padrão para todos os cenários.