Skip to content

Database comportamento diferente para cenários similares #10

@leonardodelfino

Description

@leonardodelfino

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions