Files
directus/packages/data
Jan Arends d6e6208c26 Data abstraction: Field selection, modifiers and m2o for PostgreSQL driver (#19146)
* Naming typo

* First experiments

* Setup testing playground

* Fetch in client stream

* Add logging

* Remove unneeded stream to string util

* added logical operator to complex test and cleanup

* Improve typing

* started adding function support

* Support nested m2o in data-sql

* Implement join sql string creation

* It's alive!

* Remove unused aliases

* Add todo reminder

* fix build

* small improvements for fn conversion

* function conversion in pg driver

* more expressive typedocs

* toMatchObject in data sql to ignore alias and path

* added type to sort node

* moved and fixes tests for comparison

* moved condition tests

* separate file for functions

* test for function condition

* added proper args to function although not in use

* AT TIME ZONE 'UTC' when needed, proper arg value

* intersects support in pg driver

* convert geo value

* docs for intersects

* reworked column as function input

* support for functions in abstract select

* fixes tests

* count support in select

* refactoring: split up filter conversion

* starting every and some operators

Co-authored-by: Nicola Krumschmidt <nickrum@users.noreply.github.com>

* extracted variable in test

* in operator with sub query support

* split up conditions type into multiple types

* type for a single query parameter

* condition type

* intersects_bbox in pg driver

* finalized type declarations

* geo condition types

* pnpm lock update

* removed playground

* join

* fixed geo

* fixed types in test

* changeset

* made path prop required again

* geojson for intersects to the driver

* removed sub query from set-condition

* clean up form sub query removal

* added between support

* fixed geo condition test type

* formatting

* moved number operators to utils

* xy-condition to condition-xy

* remove between

* between clean up

* formatter

* refactoring: split up condition generation

* changeset

* split up type for geo condition

* refactoring: split up conditions converter

* fix formatter

* split up types

* split up abstract query into multiple files

* export fix

* split up condition builders in pg driver

* enabled all functions in select and nr condition

* adjusted join conversion and added test

* added test for node conversion

* moved index generator to converter dir

* docs

* format fix

* split up abstract query types further

* split up abstract sql types further

* split ups in converter and fine granular tests

* fix format

* proper index file in converter

* proper type for generator

* more docs on data-sql

* updated data readme

* readme tweaks

* removed circular dependency and added union type

* moved create-identifier function

* added index file in sql utils

* comment on converter usage

* removed circular deps in sql types

* last dependency fixes in data sql

* fixed tests

* cleanup up dependencies in overall abstract query

* removed base type to reduce noise

* reduce some index files in sql types declaration

* formatter

* more dependency tweaks

* formatter

* graphs for data and data-sql

* added dependency cruiser

* added lock file

* pnpm downgrade 8.6.0 to fixed lock file

* try fixing again with 8.6.2

* formatting

* formatting, now with correct formatter

* fixed dependencies

* formatter

* extracted variable for more readable code

Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>

* formatter

* fixed export of condition types for driver

* consistent file naming for conditions

* updated docs

* type fix

* removed todo

* another type fix

* split up expand func and added test

* todo test for driver class

* fixed unit test

* fixed typo

* removed todo, though about it, it's good as it is

* separated path map creation from query-converter

* renamed converter to query-converter

* user specific aliases for primitives

* fixed linter

* user specified alias for m2o

* documentation

* redesigned the function types and added alias support

* formatter

* unit test for pg driver index file

* moved call to source as class member

* moved alias map creation back to converter

* moved unique alias generation to ORM

* tsup update

* renamed nodes to fields

* redefined return type of query converter

* modifier conversion similar to fields conversion

* added response converter dir again

* aligned unit tests

* fixed circular dependency

* moved orm logic one level up again

* formatter

* removed SVGs

* Update pull_request_template.md

* Update pull_request_template.md

* Run formatter

* a bit renaming and restructuring

* formatter

---------

Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
Co-authored-by: Nicola Krumschmidt <nickrum@users.noreply.github.com>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
2023-10-06 09:32:04 -04:00
..
2023-05-10 14:30:53 -04:00
2023-09-26 21:14:27 +08:00

@directus/data

Warning

This is a work in progress. Nothing is expected to work yet.

Installation

npm install @directus/data

The installation of a driver is also required.

Usage

Setup

import { DataEngine } from '@directus/data';
import { DataDriverPostgres } from '@directus/data-driver-postgres';

// Instantiate the engine
const engine = new DataEngine();

// Instantiate a driver
const pgDriver = new DataDriverPostgres({
	connectionString: 'postgresql://root:password@localhost/mydb',
});

// register the driver to the engine
await engine.registerStore('postgres', pgDriver);

Query data

// query data
await engine.query({
	root: true,
	store: 'postgres',
	collection: 'articles',
	fields: [
		{
			type: 'primitive',
			field: 'id',
		},
	],
});

The above is resulting in the following flow.

graph TB;
    api --> data
	subgraph da[data abstraction]
		direction TB
		data --> data-driver-x --> db1[(datastore)]
		data --> data-driver-y --> db2[(datastore)]
	end

Current architecture of this package

To get an overview of how the package is organized regarding it's files, directories and the dependencies between them, run pnpm run depcruise and have a look in the created dependency-graph.svg image.