On Mon, Aug 2, 2021 at 7:02 AM [email protected] <[email protected]> wrote:
> Using Sequel and the tiny_tds client in a Sinatra application.
>
> When I use the tiny_tds client in a controller directly, the dataset is
> converted to JSON as expected:
>
> before do
> content_type :json
> end
>
> get '/' do
> client = TinyTds::Client.new(:host =>'HOST', :database =>
> 'DATABASE', :username => 'USER', :password => 'PASSWORD')
> query = 'SELECT * FROM MssqlTable'
> client.execute(query).each.to_json
> end
>
> # results
> [{
> expected JSON object
> }]
>
> However, when I include Sequel:
>
> class MssqlTable < Sequel::Model(: mssql_table )
> end
>
> get '/' do
>
> Sequel.connect(adapter: :tinytds, host: 'HOST', port: 1433, database:
> 'DATABASE', user: 'USER', password: 'PASSWORD')
> MssqlTable.all.to_json
>
> # MssqlTable.all.each.to_json # "#<Enumerator:0x00007fdd400f43d8>"
>
> # @results.all.each do |r|
> # r.to_json # undefined method `bytesize' for #
> # end
>
> end
>
> # results
> ["#<MssqlTable:0x00007effa80ed068>"]
>
> What's the correct syntax to have <MssqlTable> converted to JSON?
>
There are a couple different issues here. First, you should never create a
Sequel::Database instance inside a route handling block. Second, you
probably want to use the json_serializer plugin:
DB =
Sequel.connect(adapter: :tinytds, host: 'HOST', port: 1433, database:
'DATABASE', user: 'USER', password: 'PASSWORD')
class MssqlTable < Sequel::Model(: mssql_table )
plugin :json_serializer
end
get '/' do
MssqlTable.to_json
end
Alternatively, you could try just returning hashes instead of model objects:
get '/' do
MssqlTable.naked.all.to_json
end
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 view this discussion on the web visit
https://groups.google.com/d/msgid/sequel-talk/CADGZSSdnu5bYuV-bckR-CFN5SXjgE9MQ28_ZC6NcbVUw8MwGyA%40mail.gmail.com.