ClickHaskell: ClickHouse driver

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Warnings:

Small dependency footprint highlevel ClickHouse driver


[Skip to Readme]

Properties

Versions 0.1.0, 0.2.0
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), binary (<9), bytestring (<0.13), deepseq (<1.6), network, text (<2.2), time (<1.13), vector (<0.14), wide-word (<0.2) [details]
License BSD-3-Clause
Copyright 2023 Kovalev Dmitry
Author Kovalev Dmitry
Maintainer Kovalev Dmitry
Category ClickHouse
Home page https://github.com/KovalevDima/ClickHaskell#readme
Bug tracker https://github.com/KovalevDima/ClickHaskell/issues
Source repo head: git clone https://github.com/KovalevDima/ClickHaskell(ClickHaskell)
Uploaded by onarainydayillwinanyway at 2024-12-23T02:23:59Z

Modules

[Index] [Quick Jump]

Flags

Manual Flags

NameDescriptionDefault
release

Pre-release build options

Disabled
dev

Dump core

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for ClickHaskell-0.2.0

[back to package description]

ClickHaskell

Haskell implementation of ClickHouse DBMS Native protocol and client

Surf across Home page to learn everything you need

Design

ClickHaskell was designed to avoid boilerplate code
and decouple business logic from DBMS protocol implementation

The key idea is to specilize database table/query/view interface
as a Haskell type and then to constuct a correspondence
(decoder/encoder and query) from record generic representation

For example in case of

Table              <--    Record
├name1 : Type1   encoder  ├name1 : Type1
├name2 : Type2            ├name2 : Type2
...              decoder  ...        
└nameN : TypeN     -->    └nameM : TypeM

we can construct queries and decoders/encoders
for server/client packets with data

Also we can construct queries like

SELECT name1, name2, ..., nameN FROM tableName
SELECT name1, name2, ..., nameN FROM viewName(...)
INSERT name1, name2, ..., nameN INTO tableName

and combine it with encoder/decoder to generate
end-to-end database communication functions which
only takes a data on runtime