/Qapper

Qapper (pronounced 'kwapper') is a super simple object mapper for kdb+\q

Primary LanguageC#GNU Lesser General Public License v3.0LGPL-3.0

Qapper - .net Data Mapping tools for Q

GitHub license Nuget NuGet GitHub issues GitHub forks GitHub stars

Qapper (pronounced 'kwapper') is a super simple object mapper for kdb+/q modelled after Dapper

DISCLAIMER

IMPORTANT: The current state of this toolkit is PRE-ALPHA/Development. Please consider it version a foundational version. Many areas could be improved and change significantly while refactoring current code and implementing new features.

Introduction

Qapper assists a .net developer to easily push data into and retrieve data from a kdb database. Qapper automatically maps between object instances and table rows so that client side programming involves working with simple C# object instances further simplifying the interaction.

Getting Started

Install the NuGet package.

Example

Given a plain C# class decorated with QSchema attributes...

namespace Auth
{
    public class User
    {
        [Key]
        public string Id { get; set; }
        [Unique]
        public string Login { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }

        // We'll store the various roles when we deserialize
        [Ignore] public string[] PrincipalIds { get; set; }
    }
}    

... and an active corresponding kdb+ database built with QSchema.SchemaBuilder, we can create an instance of the User class userInstance and store it in the database with:

    var entities = new Auth.User[]{userInstance};
    var qTable = QMapper.ConvertToQTable(entities);
    var tableName = SchemaBuilder.GetQTableName(typeof(Auth.User));
    connection.Sync("upsert", tableName, qTable);

Where the connection instance above is an active QConnection to a kdb+ database.

We can retrieve a collection of User objects from the database with a single line instruction:

IEnumerable<Auth.User> users = connection.QueryObjects<Auth.User>("select from .auth.user");

Qapper will automatically convert the returned 'q' table into an enumerable collection of object instances. The object properties of each object instance have been mapped to the columns of the table, using the QSchema naming convention, so each object instance will correspond to a row from the table. This will work with both keyed and unkeyed tables.

It really is that simple!

Take a look at the worked Example for more detail.

Future work will permit arbitrary mapping to pre-existing tables.