On Monday, April 9, 2018 at 2:43:13 PM UTC-7, Matthew Curtice wrote:
>
> I can't tell if this is a bug, or if I'm missing a work-around somewhere..
>
> I am using Sequel to interact with a Hive2 database. I have a jdbc driver
> and have created an adapter that I've gotten to work with all the methods
> I've tried so far. (The existing hive gem on rubygems is too old, and
> unfortunately my company does not allow us to make pull requests to
> contribute back to the community :( ) I am now trying to create a Model
> for the table so that I can use FactoryBot to insert data.
>
> Sequel::Model.use_transactions = false
>
> class Table_1 < Sequel::Model($hive_db[:table_1])
> set_primary_key [:id]
> end
>
> FactoryBot.define do
> factory :table_1, class: Table_1 do
> sequence(:id) {|id| id}
> name 'John Smith'
> end
> end
>
>
>
> When I try to require the model, I get:
>
>
> E, [2018-04-09T17:12:05.149000 #119768] ERROR -- :
> Java::OrgApacheHiveServiceCli::HiveSQLException: Error while compiling
> statement: FAILED: ParseException line 1:0 cannot recognize input near
> 'BEGIN' '<EOF>' '<EOF>': BEGIN
> E, [2018-04-09T17:12:05.164000 #119768] ERROR -- :
> Java::OrgApacheHiveServiceCli::HiveSQLException: Error while compiling
> statement: FAILED: ParseException line 1:0 cannot recognize input near
> 'ROLLBACK' '<EOF>' '<EOF>': ROLLBACK
>
> From digging into the Sequel Code, it seems that the function get_db_schema
> uses a couple of different methods to define the schema for the model, but
> all of these methods use check_non_connection_error.
> check_non_connection_error uses db.transaction(:savepoint=>:only){yield} even
> though I set use_transactions to false. I tried to dig further into the
> transaction methods, but could see no where else where it honors my request
> to use transactions..
>
> I believe that instead, check_non_connection_error should be using the
> checked_transaction function? or is there another option I'm missing?
>
>
If your database doesn't support transactions, you probably want to do:
def $hive_db.transaction(*)
yield
end
The use_transactions model setting only affects transactions used when
saving/deleting records. This is explained in the documentation for the
setting.
Thanks,
Jeremy
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.