From 4e4816eb77a5add12a83a577c96a76ff524a4506 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Tue, 28 Sep 2021 01:39:21 +0200 Subject: [PATCH] Update documentation --- README.md | 25 ++++++++++++++---- docs/call function.png | Bin 0 -> 90847 bytes docs/call function.puml | 52 ++++++++++++++++++++++++++++++++++++++ docs/checklist.md | 9 +++++++ docs/usage/raw-request.md | 46 ++++++++++++++++++++++++++++++--- 5 files changed, 124 insertions(+), 8 deletions(-) create mode 100644 docs/call function.png create mode 100644 docs/call function.puml create mode 100644 docs/checklist.md diff --git a/README.md b/README.md index 57b4aec..f407b6c 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,15 @@ _Kotlin library to request postgres with native SQL queries_ [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=postgres-json&metric=coverage)](https://sonarcloud.io/dashboard?id=postgres-json) [![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=postgres-json&metric=ncloc)](https://sonarcloud.io/dashboard?id=postgres-json) -* [Installation](./docs/installation.md) -* [Migrations](./docs/migrations/migrations.md) -* [Usage](./docs/usage/usage.md) +--- + +## What is this lib for? +This library allows you to make sql requests and return the result in json format, then deserialize it into an entity. +It also allows you to save an entity (INSERT) by serializing it and sending the json to the database, allowing you to insert several entities with their children, in a single request. + +It also manages the migrations of the schema of tables and stored procedures. + +All sql requests are handled manually for full control over what you do. --- @@ -16,7 +22,16 @@ _Kotlin library to request postgres with native SQL queries_ * Total control of all Postgresql features and SQL language * More speed and flexible than an ORM -* [Multi level request](./docs/usage/multi-level.md) +* [Multi level request](./docs/usage/multi-level.md) (Can return multiple tables and these children in a single request) * Queries are written in separate native `.sql` files +* Unit testing of SQL queries +* Migrations are written in separate native `.sql` files * Automatic tested database migration and rollback -* Unit testing of SQL queries \ No newline at end of file +--- +## Documentation: Table of Contents + +* [Installation](./docs/installation.md) +* [Migrations](./docs/migrations/migrations.md) +* [Usage](./docs/usage/usage.md) +* [How that works](./docs/call%20function.png) (Diagram) +* [How to begin](./docs/checklist.md) diff --git a/docs/call function.png b/docs/call function.png new file mode 100644 index 0000000000000000000000000000000000000000..b3bd0e5f951a744cdf487102c08e45dc5d84718b GIT binary patch literal 90847 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 literal 0 HcmV?d00001 diff --git a/docs/call function.puml b/docs/call function.puml new file mode 100644 index 0000000..3ff5503 --- /dev/null +++ b/docs/call function.puml @@ -0,0 +1,52 @@ +@startuml + +participant Gradle +participant App +control Migration +control Repository +control Requester +control Function +control Connection +database Database + +== Migration == + +[-> Gradle++ : run gradle + Gradle -> Migration** : Init Migration + Migration -> Migration : Read Schemas + Migration -> Migration : Read SQL Function + Gradle -> Migration++ : Run Migrations + Migration -> Migration : Run Migrations + return + Gradle -> Migration!! +return + +== Application == + +[-> App : run app + App -> Connection** : Create Connection + Connection -> Database : Connect to the database + App -> Requester** : Create Requester + Requester -> Requester: Read all Function file + Requester -> Function** : Create Function object + Function -> Function : Parse function + Function -> Function : Store parameters and function name + App -> Repository** : Create Repository + +... wait request ... + +[-> Repository++ : call repository with args + Repository -> Repository : Define function name + Repository -> Requester++ : get function + Requester -> Function++ : select() + Function -> Function : Compile args + Function -> Function : Compile SQL + Function -> Connection++ : select() + Connection -> Database++ : Send Prepared Statement + return + Connection -> Connection : Convert json to Entity + return entity + return entity + return entity +return entity +@enduml \ No newline at end of file diff --git a/docs/checklist.md b/docs/checklist.md new file mode 100644 index 0000000..5141fd8 --- /dev/null +++ b/docs/checklist.md @@ -0,0 +1,9 @@ +# Checklist + +- [ ] Define schemas with migrations files (*.up.sql & *.down.sql) +- [ ] Define query with sql function (*.sql) +- [ ] Create Entity (*.kt) +- [ ] Create repository (*.kt) +- [ ] Configure migrations in gradle +- [ ] Execute migrations functions +- [ ] Call Repository diff --git a/docs/usage/raw-request.md b/docs/usage/raw-request.md index 5638ba8..4c04946 100644 --- a/docs/usage/raw-request.md +++ b/docs/usage/raw-request.md @@ -24,9 +24,11 @@ val connection: Connection = TODO() data class Inventor( val id: UUID = UUID.randomUUID(), - val name: String + val name: String, + val roles: List = listOf(), ): Serializable +// Select one entity val result: Inventor? = connection.selectOne( """ SELECT json_build_object( @@ -37,9 +39,47 @@ val result: Inventor? = connection.selectOne( mapOf("name" to "Nikola Tesla") ) -val inventor = connection.selectOne("SELECT * FROM mytable WHERE id = :id") +// Select multiple entities +val result = connection.select>( + """ + SELECT json_build_array( + json_build_object( + 'id', '9e65de49-712e-47ce-8bf2-dfffae53a82e', + 'name', :name + ), + json_build_object( + 'id', '32f67ed3-af6d-403b-a3b9-5fe3540c3412', + 'name', :name2 + ) + ) + """, + mapOf( + "name" to "Nikola Tesla", + "name2" to "Albert Einstein", + ) +) -val inventors: List = connection.select("SELECT * FROM mytable WHERE status = 'done'") +// Select multiple with real query +val result: List = connection.select( + """ + select json_agg(i) + from inventor i + where roles @> ARRAY[:role]; + """, + mapOf("role" to "ADMIN") +) + + +// Select multiple with only some rows +val result: List = connection.select( + """ + select json_agg(i) + from ( + select id, name + from inventor + ) i; + """ +) ```