Diese Anleitung beschreibt, wie die lokale NodeQL-Java-Bibliothek in FQLite eingebunden ist und wie das Projekt ausgeführt werden kann.
FQLite bleibt die vollwertige Hauptanwendung. NodeQL ist nur eine optionale Ergänzung: FQLite bekommt einen eigenen NodeQL Builder, in dem SQL-Commands als Blöcke zusammengesteckt werden. Der Builder kompiliert die Blockkette zu SQL und übergibt das SQL an den bestehenden SQL Analyzer.
fqlite/
src/digital/codespiresolutions/nodeql/
BlockNode.java
BlockType.java
Position.java
SqlCompileResult.java
SqlCompiler.java
build.gradle
src/fqlite/nodeql/NodeQlBuilderWindow.java
src/fqlite/sql/SQLWindow.java
In build.gradle werden die FQLite- und NodeQL-Quellen gemeinsam aus src kompiliert:
sourceSets {
main {
java {
srcDirs = ['src']
}
resources {
srcDirs "resources"
}
}
}Dadurch ist weder ein separates JAR noch ein nicht versionierter Elternordner nötig. FQLite kann die Klassen direkt importieren:
import digital.codespiresolutions.nodeql.SqlCompileResult;
import digital.codespiresolutions.nodeql.SqlCompiler;Die Integration sitzt an zwei Stellen.
Im Hauptfenster gibt es unter:
Analyze > NodeQL Builder...
zusätzlich einen Toolbar-Button:
NodeQL
Dieser Workflow ist die normale FQLite-Integration:
- Eine SQLite-Datenbank in FQLite öffnen.
Analyze > NodeQL Builder...wählen oder denNodeQL-Toolbar-Button klicken.- Im NodeQL Builder SQL-Blöcke aus der Palette hinzufügen.
- Die Blöcke unter
EXECUTE QUERYziehen, bis sie einschnappen. - Rechts die SQL-Vorschau prüfen.
Open in SQL Analyzerklicken.- Das SQL kann dort mit dem normalen Play-Button ausgeführt werden.
Der Builder unterstützt:
- Kategorien: DQL, Joins & Sets, Aggregates, Functions, DML, DDL, DCL, TCL
- Snapping unter
EXECUTE QUERY - Löschen über
Delete,Backspace, denDelete-Toolbar-Button oder dasxam Block - große Grid-Arbeitsfläche mit Infinite-Canvas-Gefühl
- Panning im leeren Workspace-Bereich per rechter oder mittlerer Maustaste
- Zoom über
+,-,100%, Trackpad/Pinch undCmd/Ctrl+ Scroll - Live-SQL-Vorschau
Die Implementierung sitzt hier:
src/fqlite/base/GUI.java
src/fqlite/nodeql/NodeQlBuilderWindow.java
Der Builder zeigt unten rechts außerdem die Attribution:
NodeQL Implementation by Paul Bodach (CodeSpire-Solutions)
src/fqlite/sql/SQLWindow.java
Der SQL Analyzer bleibt FQLites normaler SQL-Editor. NodeQL-Dateien werden dort nicht geöffnet. Der relevante Flow ist:
- Query im NodeQL Builder zusammenstecken.
Open in SQL Analyzerklicken.- Das generierte SQL wird in den SQL Analyzer übernommen.
- Mit dem normalen Play-Button von FQLite ausführen.
Aus dem FQLite-Ordner:
cd "/path/to/fqlite"
./run-fqlite.shDas Script bevorzugt ein kompatibles JDK 21. Es prüft in dieser Reihenfolge:
- Bereits gesetztes
JAVA_HOME - Homebrew
openjdk@21 - Android Studio JBR 21
Fallback auf diesem Rechner:
/Applications/Android Studio.app/Contents/jbr/Contents/Home
Warum: Gradle 8.10.2/FQLite läuft mit den sehr neuen systemweiten JDKs 25/26 nicht sauber. Typische Fehler sind Unsupported class file major version 69 oder 25.0.2.
Manuell geht es so:
cd "/path/to/fqlite"
JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" ./gradlew runFür einen Compile-Test ohne UI:
JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" ./gradlew compileJavaDieser Compile wurde erfolgreich getestet.
Falls Android Studio nicht vorhanden ist, installiere ein JDK 21 und starte Gradle damit:
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
./gradlew runFalls Java 21 nicht installiert ist, z. B.:
brew install openjdk@21
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
./gradlew runcd "/path/to/fqlite"
JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" ./gradlew compileJavaErwartetes Ergebnis:
BUILD SUCCESSFUL
Die fünf von FQLite benötigten NodeQL-Klassen liegen direkt im Repository:
src/digital/codespiresolutions/nodeql/
Damit enthält ein normaler Clone alle für den Build benötigten Dateien.
- FQLite starten.
- Eine SQLite-Datenbank öffnen.
Analyze > NodeQL Builder...öffnen oder den Toolbar-ButtonNodeQLklicken.- Einen
SELECT-Block hinzufügen. - Den Block unter
EXECUTE QUERYziehen, bis er einschnappt. - Optional
WHERE,JOIN,GROUP BYoderORDER BYhinzufügen und darunter einschnappen lassen. - Rechts prüfen, ob SQL generiert wird.
Open in SQL Analyzerklicken.- Mit Play ausführen.