Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

Nazwane zapytania i CRUD

INTERMEDIATE30 min
Postęp nauki 0 / 3
Zaloguj się na konto użytkownika, aby zachować postęp.

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.

  1. # 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.
  2. database Tasks {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. version = 1Pole tożsamości lub wersji w otaczającym bloku; zachowaj jego kontekst.
  4. Pusta linia oddziela fragmenty źródła.
  5. table tasks {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. storage {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  7. mode = "persistent"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  8. maxSize = 4MBOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  9. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  10. id: Int primary keyOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  11. title: StringOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  12. priority: Int default 1Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  13. done: Bool default falseOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  14. index by priorityOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  15. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  16. Pusta linia oddziela fragmenty źródła.
  17. query Add(id: Int, title: String, priority: Int) -> Unit {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  18. insert into tasks { id = :id, title = :title, priority = :priority }Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  19. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  20. Pusta linia oddziela fragmenty źródła.
  21. query Open() -> List<tasks> {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  22. 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.
  23. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  24. Pusta linia oddziela fragmenty źródła.
  25. query Finish(id: Int) -> Int {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  26. update tasks set done = true where id == :idOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  27. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  28. Pusta linia oddziela fragmenty źródła.
  29. query Remove(id: Int) -> Int {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  30. delete from tasks where id == :id and done == trueOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  31. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  32. Pusta linia oddziela fragmenty źródła.
  33. query Count() -> Int {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  34. select tasksOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  35. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  36. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  37. 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 / polecenieOpis
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
CLIkret check (schemat), kret run --data <katalog> (izolowana baza testowa), kret test --policy (świeża baza na moduł)
Otwórz cały rozdział ze źródłem →
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

ElementStan w KretDB
Struktura plikudatabase Nazwa { version = N; table …; query …; migration from N { … } }.
Rozszerzenie.kdb; plik Disk/Schema.kdb.
Komentarze# ….
Typy kolumnBool Int32 Int64 Float64 Decimal String Bytes UUID Instant Duration (aliasy Int, Float, Timestamp); ? = opcjonalna.
Zmienne / funkcje / pętlenie istnieją w .kdb; logika w KretS.
Parametry:nazwa w zapytaniu; wartości zawsze wiązane.
Obsługa błędówKCS-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/Bytes w where (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.0 FROZEN_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-info raportuje syntax: PROVISIONAL — rozbieżność z freeze.

Pełna referencja konstrukcji: SYNTAX_REFERENCE.md.

Otwórz cały rozdział ze źródłem →
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):

  1. kret check . --json — w wyniku: "succeeded": true
  2. kret run . --policy host-policy.json --data {DATA} --invoke tasks.finish=[2] — w wyniku: zmieniono 1

Wynik tej rundy: PASS — zob. EXPECTED_OUTPUT.txt.

Otwórz cały rozdział ze źródłem →

Ć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.

Które podsumowanie jest zgodne z lekcją?

To quiz o opisanym kontrakcie. Nie kompiluje kodu, nie potwierdza wykonania programu i nie przyznaje nagród.

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 →

Wybierz, co możemy zapamiętać w tej przeglądarce. Możesz zmienić decyzję w każdej chwili.

Polityka prywatności