Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Changelog

## 2026-06-14 - PostgreSQL engine
You can now choose between SQLite and PostgreSQL in the menu above the schema. PostgreSQL gives proper data types. The editor also gained autocomplete for table and column names.

## 2026-06-14 - Relational algebra mode
You can now answer questions with relational algebra instead of SQL. Use the SQL/RA toggle to switch. Expressions are converted to SQL and run the same way, and the generated SQL is shown for reference.

Expand Down
11 changes: 11 additions & 0 deletions data/oracle-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,17 @@ export interface OracleQuestion {
* these alternatives are only used for validation.
*/
alternativeQueries?: string[];
/**
* PostgreSQL-specific reference query, using the same placeholder format.
* Used instead of `query` when generating for a PostgreSQL-engine language.
* Only needed when the query differs from the SQLite version (e.g. EXTRACT vs YEAR).
*/
pgQuery?: string;
/**
* PostgreSQL-specific alternative queries.
* Falls back to `alternativeQueries` if not provided.
*/
pgAlternativeQueries?: string[];
}

export interface OracleData {
Expand Down
Binary file modified data/oracle.enc
Binary file not shown.
75 changes: 41 additions & 34 deletions languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -427,40 +427,47 @@ const de: LanguageDefinition = {
"Warnung: Diese Speicherdatei wurde in einer anderen Sprache erstellt ({{fileLang}}). Der Import kann zu Problemen führen..",
viewLabel: "View",
changelog: "Änderungsprotokoll",
modeSQL: "SQL",
modeRA: "Relationale Algebra",
generatedSQL: "Generiertes SQL",
raParseError: "Fehler in relationaler Algebra: {{message}}",
raPlaceholder: "-- Schreibe einen Ausdruck der relationalen Algebra\n-- Klicke auf 'RA-Referenz' für die Syntax",
raReference: "Referenz relationale Algebra",
raUnaryOps: "Unäre Operatoren",
raBinaryOps: "Binäre Operatoren",
raColOp: "Operator",
raColSyntax: "Syntax",
raColDesc: "Beschreibung",
raDescSelection: "Selektion — Zeilen filtern",
raDescProjection: "Projektion — Spalten auswählen",
raDescRename: "Spalten umbenennen",
raDescGroup: "Gruppierung mit Aggregaten",
raDescSort: "Sortierung",
raDescDistinct: "Duplikate entfernen",
raDescCross: "Kreuzprodukt",
raDescNatJoin: "Natürlicher Join",
raDescThetaJoin: "Theta-Join (bedingt)",
raDescUnion: "Vereinigung",
raDescIntersect: "Schnittmenge",
raDescMinus: "Differenz",
raDescDivide: "Division",
raNotation: "Notationsstile",
raNoteBrackets: "— eckige Klammern",
raNoteCurly: "— geschweifte Klammern",
raNoteLaTeX: "— LaTeX-Stil",
raNoteImplicit: "— ohne Klammern",
raNoteChain: "— Verkettung ohne ()",
raAssignment: "Zuweisung",
raNoteAssignment: "Die letzte Zuweisung wird automatisch zurückgegeben",
raConditions: "Bedingungen",
raNoteComparison: "Vergleichsoperatoren: = <> < > <= >=",
modeSQL: "SQL",
modeRA: "Relationale Algebra",
generatedSQL: "Generiertes SQL",
raParseError: "Fehler in relationaler Algebra: {{message}}",
engineLoadFailed: "Die PostgreSQL-Engine konnte nicht geladen werden. Wechsel zurück zu SQLite.",
raPlaceholder: "-- Schreibe einen Ausdruck der relationalen Algebra\n-- Klicke auf 'RA-Referenz' für die Syntax",
raReference: "Referenz relationale Algebra",
raUnaryOps: "Unäre Operatoren",
raBinaryOps: "Binäre Operatoren",
raColOp: "Operator",
raColSyntax: "Syntax",
raColDesc: "Beschreibung",
raDescSelection: "Selektion — Zeilen filtern",
raDescProjection: "Projektion — Spalten auswählen",
raDescRename: "Spalten umbenennen",
raDescGroup: "Gruppierung mit Aggregaten",
raDescSort: "Sortierung",
raDescDistinct: "Duplikate entfernen",
raDescCross: "Kreuzprodukt",
raDescNatJoin: "Natürlicher Join",
raDescThetaJoin: "Theta-Join (bedingt)",
raDescUnion: "Vereinigung",
raDescIntersect: "Schnittmenge",
raDescMinus: "Differenz",
raDescDivide: "Division",
raNotation: "Notationsstile",
raNoteBrackets: "— eckige Klammern",
raNoteCurly: "— geschweifte Klammern",
raNoteLaTeX: "— LaTeX-Stil",
raNoteImplicit: "— ohne Klammern",
raNoteChain: "— Verkettung ohne ()",
raAssignment: "Zuweisung",
raNoteAssignment: "Die letzte Zuweisung wird automatisch zurückgegeben",
raConditions: "Bedingungen",
raNoteComparison: "Vergleichsoperatoren: = <> < > <= >=",
editorSettings: "Editor-Einstellungen",
settingAutocomplete: "Autovervollständigung",
settingLineNumbers: "Zeilennummern",
settingHighlightActiveLine: "Aktive Zeile hervorheben",
sqlReferencePostgresql: "PostgreSQL-Dokumentation",
engineMismatchWarning: "Warnung: Diese Speicherdatei wurde mit einer anderen Datenbank-Engine erstellt ({{fileEngine}}). Der Import kann zu Problemen führen.",
},
};

Expand Down
7 changes: 7 additions & 0 deletions languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,7 @@ const en: LanguageDefinition = {
modeRA: "Relational Algebra",
generatedSQL: "Generated SQL",
raParseError: "Relational algebra error: {{message}}",
engineLoadFailed: "Failed to load the PostgreSQL engine. Falling back to SQLite.",
raPlaceholder: "-- Write a relational algebra expression\n-- Click 'RA Reference' for syntax",
raReference: "Relational Algebra Reference",
raUnaryOps: "Unary Operators",
Expand Down Expand Up @@ -461,6 +462,12 @@ const en: LanguageDefinition = {
raNoteAssignment: "Last assignment is returned automatically",
raConditions: "Conditions",
raNoteComparison: "Comparison operators: = <> < > <= >=",
editorSettings: "Editor Settings",
settingAutocomplete: "Autocomplete",
settingLineNumbers: "Line Numbers",
settingHighlightActiveLine: "Highlight Active Line",
sqlReferencePostgresql: "PostgreSQL Documentation",
engineMismatchWarning: "Warning: This save file was created with a different database engine ({{fileEngine}}). Importing may cause issues.",
},
};

Expand Down
11 changes: 11 additions & 0 deletions languages/sv-pg.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { LanguageDefinition } from "./types";
import sv from "./sv";

const svPg: LanguageDefinition = {
...sv,
code: "sv-pg",
displayName: "Svenska (PostgreSQL)",
engine: "postgresql",
};

export default svPg;
7 changes: 7 additions & 0 deletions languages/sv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,7 @@ const sv: LanguageDefinition = {
modeRA: "Relationsalgebra",
generatedSQL: "Genererad SQL",
raParseError: "Relationsalgebra-fel: {{message}}",
engineLoadFailed: "Kunde inte ladda PostgreSQL-motorn. Återgår till SQLite.",
raPlaceholder: "-- Skriv ett relationsalgebrauttryck\n-- Klicka på 'RA-referens' för syntax",
raReference: "Relationsalgebrareferens",
raUnaryOps: "Unära operatorer",
Expand Down Expand Up @@ -461,6 +462,12 @@ const sv: LanguageDefinition = {
raNoteAssignment: "Sista tilldelningen returneras automatiskt",
raConditions: "Villkor",
raNoteComparison: "Jämförelseoperatorer: = <> < > <= >=",
editorSettings: "Editorinställningar",
settingAutocomplete: "Autokomplettering",
settingLineNumbers: "Radnummer",
settingHighlightActiveLine: "Markera aktiv rad",
sqlReferencePostgresql: "PostgreSQL-dokumentation",
engineMismatchWarning: "Varning: Denna sparfil skapades med en annan databasmotor ({{fileEngine}}). Import kan orsaka problem.",
},
};

Expand Down
2 changes: 2 additions & 0 deletions languages/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ export interface LanguageDefinition {
code: string;
/** Display name in the language itself, e.g. "Svenska", "English" */
displayName: string;
/** Database engine: "sqlite" (default) or "postgresql" */
engine?: "sqlite" | "postgresql";

// ── Data: Names ──────────────────────────────────────────────
/** First names pool (min 15, indexed by canonical person slot) */
Expand Down
Loading
Loading