DEV Community

Jakub Dubec
Jakub Dubec

Posted on • Edited on

2 1

Customizable database-based reporting

My Final Project

I often struggled when I was trying to create customizable reporting tool for my projects. I wanted to have ability to have secure data mining tool which is simple and easy to use.

Of course, there are a lot of project like Metabase or Kibana. These tools are super cool, but sometimes to complicated or hard to customize for special use-case. You can also use GraphQL, but you still need to specify queries on the back-end.

I decited to create a simple JSON-based query language, which is converted into raw SQL query on the server side. Sounds too crazy? Yeah, because it is kinda crazy (because of security and stuff).

My idea was to create subset of DQL (data query language) functionality interpreted as JSON objects on the front-end application. To be sure about security, build query is checked on the API if it's valid and user is trying to access only his data.

This projects was subject to my final thesis.

Link to Code

I created library called duckql, which converts JSON into raw SQL.

For example, JSON object like this:

{
  "obj": "structures.Query",
  "entity": "users",
  "properties": [
    {
      "obj": "properties.Property",
      "name": "users.name"
    },
    {
      "obj": "properties.Property",
      "name": "users.surname"
    }
  ],
  "conditions": {
    "obj": "structures.Comparision",
    "properties": [
      {
        "obj": "properties.Property",
        "name": "users.age"
      },
      {
        "obj": "properties.Constant",
        "value": "15"
      }
    ],
    "operation": "gte"
  }
}
Enter fullscreen mode Exit fullscreen mode

is converted into query like this:

SELECT users.name, users.surname FROM users WHERE (users.age >= 15);
Enter fullscreen mode Exit fullscreen mode

My solution is based on awesome pydantic library.

Source code is avalaible on GitHub: duckql-python.

AWS Q Developer image

Your AI Code Assistant

Automate your code reviews. Catch bugs before your coworkers. Fix security issues in your code. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more