Crystal binding for the MonetDB MAPI client interface
Tested on
Crystal 0.22
Work around added for Crystal 0.23 on CentOS see crystal-lang/crystal#4719
You will need the MonetDB client package installed for this to work and also an instance of MServer5 running
We can now perform a query that emits JSON useful for SELECT statements
For more details look at monetdb.org
Shards
Add this to your shard.yml and run shards install or crystal dep
crystal-monetdb-libmapi:
github: puppetpies/crystal-monetdb-libmapi
version: ">= 0.1.1"
Examples schemas provided under examples/
# Example code from shard crystal-monetdb-examples
require "crystal-monetdb-libmapi"
require "crystal-monetdb-libmapi/monetdb_data"
require "colorize"
class ConnectionError < Exception; end
class QueryError < Exception; end
class InternalError < Exception; end
class TimeoutError < Exception; end
host = "127.0.0.1"
port = 50000
username = "monetdb"
password = "monetdb"
db = "threatmonitor"
mero = MonetDB::ClientJSON.new
mero.host = host
mero.port = port
mero.username = username
mero.password = password
mero.db = db
myschema = "\"threatmonitor\""
query = "SELECT * FROM #{myschema}.fruits;"
mero.connect
# Alternative connect overload method to allow easy connect
# conn = MonetDB::Client.new
# conn.connect("localhost", "username", "password", "testschema")
result_json = mero.query_json(query)
result = mero.json_to_hash(result_json)
puts "Hash Created:".colorize(:red)
p result
puts "Display specific fields".colorize(:red)
result.each {|k,v|
puts "Hash Key: #{k} Name: #{v["name"]} Price: #{v["price"]}"
}
NOTE: I recently added a workaround for compiling under Centos 7 / RHEL
We also provide an easyconnect script which allows you to provide all the host, login parameters as seen above.
There are a few benchmark tools ( Feel free to add more )
insperf - Insert performance included my stopwatch
insperf_fiber
randomize - Random columns / table width and data
I do hope with this project people get involved feel free to fork the project as always, raise issues where needed i just want everyone to have a good time !
Have fun!
Brian Hood