mongodb_adapter.rb 892 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. module Blazer
  2. module Adapters
  3. class MongodbAdapter < BaseAdapter
  4. def run_statement(statement, comment)
  5. columns = []
  6. rows = []
  7. error = nil
  8. begin
  9. documents = db.command({:$eval => "#{statement.strip}.toArray()"}).documents.first["retval"]
  10. columns = documents.flat_map { |r| r.keys }.uniq
  11. rows = documents.map { |r| columns.map { |c| r[c] } }
  12. rescue => e
  13. error = e.message
  14. end
  15. [columns, rows, error]
  16. end
  17. def tables
  18. db.collection_names
  19. end
  20. def preview_statement
  21. "db.{table}.find().limit(10)"
  22. end
  23. protected
  24. def client
  25. @client ||= Mongo::Client.new(settings["url"], connect_timeout: 1, socket_timeout: 1, server_selection_timeout: 1)
  26. end
  27. def db
  28. @db ||= client.database
  29. end
  30. end
  31. end
  32. end