From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 5181A7F02D; Fri, 10 Oct 2014 00:59:58 +0200 (CEST) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of jp.deplaix@gmail.com) identity=pra; client-ip=209.85.212.176; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="jp.deplaix@gmail.com"; x-sender="jp.deplaix@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of jp.deplaix@gmail.com designates 209.85.212.176 as permitted sender) identity=mailfrom; client-ip=209.85.212.176; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="jp.deplaix@gmail.com"; x-sender="jp.deplaix@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-wi0-f176.google.com) identity=helo; client-ip=209.85.212.176; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="jp.deplaix@gmail.com"; x-sender="postmaster@mail-wi0-f176.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AoIBAAITN1TRVdSwlGdsb2JhbABgg2FYgwbIFYhXFgERAQEBAQcLCwkSLoQcERUIARscAgMSEA8CBRYLAgsDAgECARERAQUBIgEMCAIFGYgHAQMRBQiiKm6LMIFygxCHawoZJw1nhXwSAQUOgR6SFoFUBZMAgzuHEIEuhjiKLYIMQYMdAhyBWmsBAYJIAQEB X-IPAS-Result: AoIBAAITN1TRVdSwlGdsb2JhbABgg2FYgwbIFYhXFgERAQEBAQcLCwkSLoQcERUIARscAgMSEA8CBRYLAgsDAgECARERAQUBIgEMCAIFGYgHAQMRBQiiKm6LMIFygxCHawoZJw1nhXwSAQUOgR6SFoFUBZMAgzuHEIEuhjiKLYIMQYMdAhyBWmsBAYJIAQEB X-IronPort-AV: E=Sophos;i="5.04,688,1406584800"; d="scan'208";a="100322015" Received: from mail-wi0-f176.google.com ([209.85.212.176]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 10 Oct 2014 00:59:57 +0200 Received: by mail-wi0-f176.google.com with SMTP id hi2so409590wib.3 for ; Thu, 09 Oct 2014 15:59:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; bh=Cch62TWY0NGb9ttUQcHd40yZtpf3g0PD/8mFu3hjpu0=; b=cnnYlGiiLb1qbnft9w1p+XubqOulylQHYXpUGFxXqoAUDymjMa3rx2X0ee2oShSIR5 MD+r9+XFx4QrIRn/1RYy6qRtU7tGHwD+NwX3FNcKdgQF2EFRfubkNSRZj3xnfefhc02a 2LVjOBv+CrX8zRTt7QRT/XcO1YT8O/lOjhZ6/ck4dy/xKFZDmcUBFVbmMbK0gjf3cRnE iLC/BbJQX9wpzi1NZ9EGtVNkqYLcDmtYKPouG9evR2gTxSaFsWXMeoyzE0CrPbCN4HVq wpDOARWeHyuxoDojdW/0GYTYtowKNVSGdnrXKtLWopS5BQIpf0F4mqBh7EOzrOtAqp2j 8UIw== X-Received: by 10.180.84.5 with SMTP id u5mr881654wiy.17.1412895597333; Thu, 09 Oct 2014 15:59:57 -0700 (PDT) Received: from [129.12.131.189] (stu83BD.kent.ac.uk. [129.12.131.189]) by mx.google.com with ESMTPSA id i1sm5029497wjx.32.2014.10.09.15.59.56 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Oct 2014 15:59:56 -0700 (PDT) Message-ID: <5437136C.3090102@gmail.com> Date: Thu, 09 Oct 2014 23:59:56 +0100 From: Jacques-Pascal Deplaix User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.0 MIME-Version: 1.0 To: OCaml mailing list , ocsigen Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Subject: [Caml-list] [ANN] Macaque 0.7 and 0.7.1 Hello, We're happy to announce the double release of macaque 0.7 and 0.7.1. Macaque is a type-safe and composable way to interact with SQL databases from OCaml. We propose a form of "comprehension syntax" that allow to modularly create queries in a strongly-typed and relatively principled way. Macaque is hosted on github at: https://github.com/ocsigen/macaque The packages are available on opam. Those two new releases come with some features and tiny breaking changes. The new main features are: - macaque now handles UNION, INTERSECT and EXCEPT: * Postgresql documentation: http://www.postgresql.org/docs/9.3/static/queries-union.html * Macaque example: << union ({t.foo} | t in $table1$) ({t.foo} | t in $table2$) ({t.foo} | t in $table3$) >> - new aggregate function: md5: * Postgresql documentation: http://www.postgresql.org/docs/9.3/static/functions-string.html * Macaque example: << group {hash = md5[t.foo]} | t in $table$ >> - a new operator: IN: * Postgresql documentation: http://www.postgresql.org/docs/9.3/static/functions-comparisons.html#AEN18448 * Macaque example: << {t.foo} | t in $table$; in' t.id $ids$ >> (where ids being a list of postgresql integers) Breaking changes: - We've fixed the type of current_timestamp so this should be changed in your code (see the change bellow) - We've also changed the way of calling operators. So the following code: <:table< table ( date timestamp NOT NULL DEFAULT(current_timestamp) ) >> should have to change to something like: <:table< table ( date timestamp NOT NULL DEFAULT(localtimestamp ()) ) >> (The first change is about the name and the second about the argument added) Full details: 0.7.1: - Works with PGOCaml >= 2.0. int32_array is now mapped to int32 option array instead of int32 array 0.7: - Switch to OASIS - Add support for UNION, INTERSECT, EXCEPT and their UNION ALL variant - Add short types: nullable_data and non_nullable_data - Add support for SQL function/operators: md5, IN - Support unary operators (BREAKING CHANGE) - Current_timestamp now using timestamptz + adding localtimestamp for timestamp