KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ
Nazwane zapytania i CRUD
Czego się nauczysz
- Prześledź źródła i wyjaśnij opisany kontrakt.
- W NamedQueries wskaż parametry i typ wyniku zapytania. Następnie w KretNotes odszukaj tę samą granicę UI → KretS → broker → dane.
Wymagania wstępne
- Ukończ Podstawy i wcześniejszy poziom tej ścieżki.
Wyjaśnienie krok po kroku
Nazwane zapytania wiążą parametry i wynik ze schematem. Przejdź osobno przez utworzenie, odczyt, aktualizację i usunięcie rekordu. Zwróć uwagę na typ klucza i wartości domyślne. Interfejs użytkownika może wywołać komendę KretS; nie otrzymuje przez to bezpośredniej bazy.
Praca z kodem źródłowym
Nazwane zapytania: insert, select, update, delete
Tabela z kolumnami i wartościami domyślnymi, indeks, nazwane zapytania z parametrami (`:id`), sortowanie i limit. Kod KretS dostaje typowane funkcje `db.Add`, `db.Open`, `db.Finish`, `db.Remove`, `db.Count`; wiersz tabeli jest rekordem `tasks`. Komenda hosta `tasks.finish` kończy zadanie.
# Zapytanie jest strukturą danych: SQL powstaje tylko z identyfikatorów sprawdzonych wzorcem, wartości są wiązane.
database Tasks {
version = 1
table tasks {
storage {
mode = "persistent"
maxSize = 4MB
}
id: Int primary key
title: String
priority: Int default 1
done: Bool default false
index by priority
}
query Add(id: Int, title: String, priority: Int) -> Unit {
insert into tasks { id = :id, title = :title, priority = :priority }
}
query Open() -> List<tasks> {
select tasks where done == false sort by priority desc limit 100
}
query Finish(id: Int) -> Int {
update tasks set done = true where id == :id
}
query Remove(id: Int) -> Int {
delete from tasks where id == :id and done == true
}
query Count() -> Int {
select tasks
}
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
# Zapytanie jest strukturą danych: SQL powstaje tylko z identyfikatorów sprawdzonych wzorcem, wartości są wiązane.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.database Tasks {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.version = 1Pole tożsamości lub wersji w otaczającym bloku; zachowaj jego kontekst.Pusta linia oddziela fragmenty źródła.table tasks {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.storage {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.mode = "persistent"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.maxSize = 4MBOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.id: Int primary keyOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.title: StringOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.priority: Int default 1Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.done: Bool default falseOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.index by priorityOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.query Add(id: Int, title: String, priority: Int) -> Unit {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.insert into tasks { id = :id, title = :title, priority = :priority }Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.query Open() -> List<tasks> {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.select tasks where done == false sort by priority desc limit 100Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.query Finish(id: Int) -> Int {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.update tasks set done = true where id == :idOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.query Remove(id: Int) -> Int {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.delete from tasks where id == :id and done == trueOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.query Count() -> Int {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.select tasksOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.
Oczekiwany wynik: Start: zadania posortowane po priorytecie malejąco; komenda: „zmieniono 1, usunięto 1; otwarte: …” bez zadania 2.
Typowy błąd: Porównanie kolumny `Decimal` lub `Bytes` w `where`, złączenia albo zapytania składane z tekstu — poza zakresem (`KCS-KDB-0102`).
Instrukcja, wersje i zapisane wyniki →Materiały źródłowe do tego tematu
Przeczytaj powiązane rozdziały. Kod i kontrakty zachowano z importu; historia źródeł jest dostępna przy każdym rozdziale.
KretDB — API / CLI
KretDB — API / CLI
Polski
| API / polecenie | Opis |
|---|---|
db.* (KretS) | get getOr set delete exists begin commit rollback + funkcje nazwanych zapytań (db.Add(...)) |
KretDatabase (C#, host) | Begin/Commit/Rollback, Backup, Restore, Migrate — tylko zaufany host / broker |
CLI | kret check (schemat), kret run --data <katalog> (izolowana baza testowa), kret test --policy (świeża baza na moduł) |
KretDB — specyfikacja (zakres kontraktu 1.0)
KretDB — specyfikacja (zakres kontraktu 1.0)
Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: kretdb-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.Źródła normatywne (kopie w Sources/, kolejność pierwszeństwa: decyzje właściciela → zamrożony kontrakt → kod SDK → testy):
LANGUAGE_FREEZE_1_0/05_KRETDB_SPECIFICATION.md- SDK
04_Languages/KretDB/SPEC.md
Elementy języka
| Element | Stan w KretDB |
|---|---|
| Struktura pliku | database Nazwa { version = N; table …; query …; migration from N { … } }. |
| Rozszerzenie | .kdb; plik Disk/Schema.kdb. |
| Komentarze | # …. |
| Typy kolumn | Bool Int32 Int64 Float64 Decimal String Bytes UUID Instant Duration (aliasy Int, Float, Timestamp); ? = opcjonalna. |
| Zmienne / funkcje / pętle | nie istnieją w .kdb; logika w KretS. |
| Parametry | :nazwa w zapytaniu; wartości zawsze wiązane. |
| Obsługa błędów | KCS-KDB-0xxx (kompilacja), KCS-KDB-03xx (operacje); w KretS przechwytywane try/catch. |
Zakres poza kontraktem / ograniczenia
- złączenia tabel, agregacje inne niż liczba wierszy, zapytania składane z tekstu (nie istnieją)
- porównania kolumn
Decimal/Byteswwhere(KCS-KDB-0102) - dostęp do bazy z C# pluginu (tylko zaufany adapter Core / KretBridge)
- produkcyjne użycie w Core przed decyzją D-KCS-01 (
kretdb.*PROVISIONAL) kretdb-1.0FROZEN_SUPPORTED_SUBSET; migracje/backup/restore w Core PROVISIONAL; żadna istniejąca baza nie jest migrowana.- SFI-B01 (kandydat local.3): wycofanie transakcji tylko przy odmowie autoryzacji — do potwierdzenia przez właściciela (G-05).
- SDK
sdk-inforaportujesyntax: PROVISIONAL— rozbieżność z freeze.
Pełna referencja konstrukcji: SYNTAX_REFERENCE.md.
KretDB — samouczek INTERMEDIATE
KretDB — samouczek INTERMEDIATE
Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: kretdb-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.Cel: moduły, łączenie funkcji, dane, konfiguracja, komunikacja, obsługa błędów, interfejsy SDK.
Narzędzia: kret = <SDK>\Compiler\kret.exe (SDK 1.0.0-rc.3+kret.local.3), kretui-host = <SDK>\UiHost\kretui-host.exe. {DATA}/{OUT} = nowe, puste katalogi.
1. Nazwane zapytania: insert, select, update, delete (KRETDB-I01-NamedQueries)
Projekt: ../../Examples/INTERMEDIATE_NamedQueries/ · klasyfikacja RUNNABLE_LOCAL · Playground LOCAL_EXECUTE
Kroki (katalog roboczy: katalog przykładu):
kret check . --json— w wyniku:"succeeded": truekret run . --policy host-policy.json --data {DATA} --invoke tasks.finish=[2]— w wyniku:zmieniono 1
Wynik tej rundy: PASS — zob. EXPECTED_OUTPUT.txt.
Ćwiczenie i sprawdzenie wiedzy
W NamedQueries wskaż parametry i typ wyniku zapytania. Następnie w KretNotes odszukaj tę samą granicę UI → KretS → broker → dane.
Szkic nie jest wysyłany na serwer i znika po opuszczeniu lekcji. Przed wyjściem możesz go skopiować.Podpowiedzi
- KretDB to własny interfejs bazy danych pluginu: schemat w `Disk/Schema.kdb`, nazwane zapytania typowane względem KretS, transakcje, izolowana baza należąca do brokera (backend SQLite — decyzja R-11). Plugin nigdy nie widzi SQL ani uchwytu bazy.
- Odczytaj ograniczenia i oczekiwane błędy z dostarczonego samouczka; check i run są oddzielnymi krokami.
Omówienie rozwiązania
Odpowiedź oprzyj na pokazanym kodzie i rozdziale źródłowym. Nazwane zapytania wiążą parametry i wynik ze schematem. Przejdź osobno przez utworzenie, odczyt, aktualizację i usunięcie rekordu. Zwróć uwagę na typ klucza i wartości domyślne. Interfejs użytkownika może wywołać komendę KretS; nie otrzymuje przez to bezpośredniej bazy.
Podsumowanie i następny krok
Nazwane zapytania wiążą parametry i wynik ze schematem. Przejdź osobno przez utworzenie, odczyt, aktualizację i usunięcie rekordu. Zwróć uwagę na typ klucza i wartości domyślne. Interfejs użytkownika może wywołać komendę KretS; nie otrzymuje przez to bezpośredniej bazy.
Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →