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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions