Thanks Alexey,
Any plans for :
1 - Oracle support ?
3 - NoSql databases (Mongo, Cassandra, etc) support ?
Cheers,
Dan
Date: Tue, 15 Oct 2013 23:55:16 +0600From: Alexey Uimanov <s9gf4ult@gmail.com>To: Haskell Cafe <haskell-cafe@haskell.org>Subject: [Haskell-cafe] Announce: HDBI-1.3 and friendsMessage-ID: <CANtkurc-6sQ87Bji=O0OhEteZJFh=tD2yz8ckTLgYc7J2u_SoA@mail.gmail.com>Content-Type: text/plain; charset="utf-8"Hello haskellers!HDBI is the fork of HDBC but reworked. It supports SQlite3 and Postgresqlfor now. It also supports streaming with coduits.There is TH deriving mechanism to map database rows to Haskell structuresand back. HDBI is trying to become simplebut still powerfull and flexible database interface. It must be suitable tobecome the common RDBMS interface for higher level interfaceslike persistent or haskelldb.The documentation is not very good, while I have no enough time to makesome.In this version changed typeclass signatures of Connection and Statement.Now methods `run` and `execute` get any instance of `ToRow` and method`fetch` return an instance of `FromRow`.Note that [SqlValue] is also an instance of `FromRow` and `ToRow`typeclasses so you do not loose the control.Methods `fromRow` and `toRow` for [SqlValue] are just `id`. SQlite andPostgresql drivers are fixed as well as hdbi-conduit.There is also new helper functions, like `onei ::
Integer -> [SqlValue]`which helps you to execute queries with one parameteror execute many queries consistinf of one parameter.Prelude Database.HDBI Database.HDBI.SQlite> :set -XScopedTypeVariablesPrelude Database.HDBI Database.HDBI.SQlite> :set -XOverloadedStringsPrelude Database.HDBI Database.HDBI.SQlite> c <- connectSqlite3 ":memory:"Prelude Database.HDBI Database.HDBI.SQlite> runRaw c "create table test(valinteger)"Prelude Database.HDBI Database.HDBI.SQlite> withTransaction c $ runMany c"insert into
test(val) values (?)" $ map one [1..1000]<interactive>:7:76: Warning: Defaulting the following constraint(s) to type `Integer'.........Prelude Database.HDBI Database.HDBI.SQlite> r :: (Maybe Integer) <-runFetchOne c "select sum(val) from test" ()Prelude Database.HDBI Database.HDBI.SQlite> rJust 500500Note here that the empty set is used as a parameter of query in`runFetchOne`. Empty set is an instance of `FromRow` and `ToRow` and returnan empty list of [SqlValue].Use empty list as a parameters is bad idea, because we could instantiatesome another list of things, suppose the [Integer] as `FromRow` and`ToRow` instance. So it would lead to ambigous type because [SqlValue] isalso a list instantiating `FromRow` and `ToRow`.