From cada8862b7d00f580669e937c0d6929beccac613 Mon Sep 17 00:00:00 2001 From: Aleksandr Lossenko Date: Sun, 8 Jun 2025 20:09:29 +0200 Subject: [PATCH 1/3] select specific fields --- lib/context_kit/query.ex | 7 ++++++- test/context_kit/crud/scoped_test.exs | 10 ++++++++++ test/context_kit/crud_test.exs | 12 +++++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/context_kit/query.ex b/lib/context_kit/query.ex index 30e524a..0b595ae 100644 --- a/lib/context_kit/query.ex +++ b/lib/context_kit/query.ex @@ -75,7 +75,8 @@ defmodule ContextKit.Query do :limit, :order_by, :paginate, - :preload + :preload, + :select ] def new(schema) do @@ -321,6 +322,10 @@ defmodule ContextKit.Query do limit(query, ^limit) end + defp apply_query_option({:select, fields}, query, _binding_name) do + select(query, ^fields) + end + defp apply_query_option({:preload, preload}, query, _binding_name) do preload(query, ^preload) end diff --git a/test/context_kit/crud/scoped_test.exs b/test/context_kit/crud/scoped_test.exs index 34e6389..0c73341 100644 --- a/test/context_kit/crud/scoped_test.exs +++ b/test/context_kit/crud/scoped_test.exs @@ -107,7 +107,17 @@ defmodule ContextKit.CRUD.ScopedTest do assert [db_book] = ScopedBooks.list_scoped_books() + assert db_book.id == scoped_book.id + assert db_book.title == "My Book" + end + + test "selects specific fields" do + assert {:ok, scoped_book} = Repo.insert(%ScopedBook{title: "My Book"}) + + assert [db_book] = ScopedBooks.list_scoped_books(select: [:id]) + assert scoped_book.id == db_book.id + assert db_book.title == nil end test "filters by scope" do diff --git a/test/context_kit/crud_test.exs b/test/context_kit/crud_test.exs index c478910..9c6123a 100644 --- a/test/context_kit/crud_test.exs +++ b/test/context_kit/crud_test.exs @@ -54,7 +54,17 @@ defmodule ContextKit.CRUDTest do assert [db_book] = Books.list_books() - assert book.id == db_book.id + assert db_book.id == book.id + assert db_book.title == "My Book" + end + + test "selects specific fields" do + assert {:ok, scoped_book} = Repo.insert(%Book{title: "My Book"}) + + assert [db_book] = Books.list_books(select: [:id]) + + assert scoped_book.id == db_book.id + assert db_book.title == nil end test "filters by fields in keyword list" do From a2679f4c9e25df43b8829d3e81d1c14b75398e8b Mon Sep 17 00:00:00 2001 From: Aleksandr Lossenko Date: Sun, 8 Jun 2025 20:11:40 +0200 Subject: [PATCH 2/3] select specific fields --- CHANGELOG.md | 6 +++++- README.md | 2 +- lib/context_kit/query.ex | 1 + mix.exs | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56357ba..6be4d13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # CHANGELOG -## v0.4.0 +## v0.5.0 + +* Added support for `:select` query option, to select specific fields from the database. + +## v0.5.0 * Added support for `new_#{record}` function diff --git a/README.md b/README.md index ccea329..2fe6f54 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Add `context_kit` to your list of dependencies in `mix.exs`: def deps do [ - {:context_kit, "~> 0.4.0"} + {:context_kit, "~> 0.5.0"} ] end diff --git a/lib/context_kit/query.ex b/lib/context_kit/query.ex index 0b595ae..e9feccd 100644 --- a/lib/context_kit/query.ex +++ b/lib/context_kit/query.ex @@ -63,6 +63,7 @@ defmodule ContextKit.Query do - `:limit` - Limit number of results - `:preload` - Preload associations - `:paginate` - Enable pagination with optional configuration + - `:select` - Select only specific fields from the database """ import Ecto.Query diff --git a/mix.exs b/mix.exs index de24af9..ed09e06 100644 --- a/mix.exs +++ b/mix.exs @@ -1,7 +1,7 @@ defmodule ContextKit.MixProject do use Mix.Project - @version "0.4.0" + @version "0.5.0" @source_url "https://github.com/egze/context_kit" def project do From 87d00ff048c90c3218430b0485d1d6550dffca52 Mon Sep 17 00:00:00 2001 From: Aleksandr Lossenko Date: Sun, 8 Jun 2025 20:14:07 +0200 Subject: [PATCH 3/3] typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6be4d13..f6b1d33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ * Added support for `:select` query option, to select specific fields from the database. -## v0.5.0 +## v0.4.0 * Added support for `new_#{record}` function