<div dir="ltr">Marc <br><br>What is this strange syntax<br><br> columns = [ ("trackId", conT <b><u>''Int</u></b> )<br><br>It looks like a not ended string literal unless I still have sth to learn about Haskell.<br>
<br>Thank you<br><br>J-C<br><br><br><br><div class="gmail_quote">On Thu, Sep 25, 2008 at 12:03 AM, Marc Weber <span dir="ltr"><<a href="mailto:marco-oweber@gmx.de">marco-oweber@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Wed, Sep 24, 2008 at 11:17:01PM +0200, Manlio Perillo wrote:<br>
> Hi.<br>
><br>
> I need a simple, concurrent safe, database, written in Haskell.<br>
> A database with the interface of Data.Map would be great, since what I need<br>
> to to is atomically increment some integer values, and I would like to avoid<br>
> to use SQLite.<br>
<br>
</div>I've tried writing at least part of that. But it's still higly<br>
experimental and uses template haskell.<br>
It looks like this:<br>
from that some datastructures are defined which look like<br>
tables used in traditional RDBMS such as SQLite..<br>
However if you don't want to use many "tables" you may be a lot faster<br>
writing down what you need yourself. My lib automacially generates code<br>
for inserting / deleting tuples into multi indexes such as (Map Int (Map<br>
Int PrimIdx)).<br>
<br>
$(let cds = defaultTable {<br>
tblName = "cds"<br>
, columns = [ ("cdId", conT ''Int) , ("title", conT ''Int) ]<br>
, primary = PrimaryUniq [ "cdId" ] [| 0 |]<br>
, indexes = [ Index "title" [] ]<br>
, tblStates = [ ( "nextCdId", [t| Int |], [| 0 |] ) ]<br>
}<br>
<br>
tracks = let<br>
a="a"<br>
-- updateNumRows n = [| \n -> cdUpdateByPK (\r -> r { num_tracks = (num_tracks r) + $(n) } ) |]<br>
in defaultTable {<br>
tblName = "tracks"<br>
, columns = [ ("trackId", conT ''Int )<br>
, ("name", conT ''String)<br>
, ("cd", conT ''Int) -- foreign key<br>
]<br>
, primary = PrimaryUniq [ "cd", "trackId" ] [| 0 |]<br>
, indexes = [ Index "cd" [ IndexUnique "trackId" ] ] --the id is uniq foreach cd<br>
-- checks = [ foreignConstraint "cd" "cds" "id" ]<br>
-- triggers = [ InsertUpdate (Just ["cd"]) [| cdUpdateByPK ( updateNum_tracks (+1) ) . pk |]<br>
-- DeleteUpdate (Just ["cd"]) [| cdUpdateByPK ( updateNum_tracks (-1) ) . pk |]<br>
-- ]<br>
}<br>
db = defaultDB {<br>
dbName = "my"<br>
, tables = [ cds, tracks]<br>
, statistics = True<br>
}<br>
in createDB db)<br>
<br>
<br>
If you're interested drop me a mail.<br>
<font color="#888888"><br>
Marc<br>
</font><div><div></div><div class="Wj3C7c">_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br></div>