Einzelnen Beitrag anzeigen

bepe

Registriert seit: 17. Okt 2006
119 Beiträge
 
#1

Select Methode From Unit Where Unit.name starting with "abc" and methode.1tePar...

  Alt 20. Sep 2015, 12:48
Hallo,

ich spiele derzeit mal wieder mit OTA rum und dabei ist mir so ein lustiges Interfaces über den Weg gelaufen: IOTACodeQueryServices

Der erste Gedanke: Wie, SQL Select-Statements auf meinen Quelltext abfeuern? Und ja, das funktioniert tatsächlich (naja...). Scheinbar wurde für die Castalia Toolbar ein Parser hinzugefügt, welcher einen abgespeckten Tokenstream in einer SQLite3 DB ablegt.

Bisher habe ich eine Tabelle "symbols" und zwei Views(?) "types" (select * from symbols where symbol_type = 1) und "modules" (select * from symbols where symbol_type = 0) gefunden. Aufgebaut ist die Tabelle wie folgt:

Code:
id: Integer;
symbol_type: Integer;
symbol_subtype: Integer;
parent_id: Integer;
name: String;
qualified_name: String;
start_line: Integer;
start_col: Integer;
end_line: Integer;
end_col: Integer;
attributes: TStrings
Da ich mir noch nicht im klaren darüber bin ob und was ich damit anfangen soll, habe ich einfach mal, für Interessierte, ein kleines Spielprojekt zusammen geschustert. Das angehängte Projekt erzeugen und installieren. Dann findet ihr im Delphimenü unter "Hilfe->Hilfe-Experten" den Eintrag "sqlSearch", welcher ein kleines Suchfenster öffnet.

In das Edit ein Suchbegriff eingeben und Enter. Ein Doppelklick in der Liste öffnet die Fundstelle. Der Suchbegriff ist so aufgebaut:

Code:
[gesuchter Typ:]Suchbegriff[;type:suchbegriff][;module:suchbegriff]

gesucherter Typ:
   alias         : symbol_type = 1   symbole_subtype = 0
   pointer         : symbol_type = 1   symbole_subtype = 1
   classdef      : symbol_type = 1   symbole_subtype = 2
   record         : symbol_type = 1   symbole_subtype = 3
   set            : symbol_type = 1   symbole_subtype = 4
   array         : symbol_type = 1   symbole_subtype = 5
   proctype      : symbol_type = 1   symbole_subtype = 6
   forward         : symbol_type = 1   symbole_subtype = 7
   enumtype      : symbol_type = 1   symbole_subtype = 8
   intf         : symbol_type = 1   symbole_subtype = 9
   classref      : symbol_type = 1   symbole_subtype = 10
   
   func         : symbol_type = 2   symbole_subtype = 0
   proc         : symbol_type = 2   symbole_subtype = 1
   construct      : symbol_type = 2   symbole_subtype = 2
   destruct      : symbol_type = 2   symbole_subtype = 3
   procdef         : symbol_type = 2   symbole_subtype = 4
   
   classfield      : symbol_type = 3   symbole_subtype = 0
   localvar      : symbol_type = 3   symbole_subtype = 1
   procvar         : symbol_type = 3   symbole_subtype = 2
   enumval         : symbol_type = 3   symbole_subtype = 3
   var            : symbol_type = 3   symbole_subtype = 4
   const         : symbol_type = 3   symbole_subtype = 5
   
z.B.
   array:test                        // suche alle Arrays deren Name "test" enthält
   proc:test                        // suche alle Prozeduren deren Name "test" enthält
   proc:test;type:basis               // suche alle Prozeduren deren Name "test" enthält, welche zu einem Typ gehören deren name "basis" enthält
   proc:test;module:gui               // durchsuche alle Module, welche "gui" im Namen enthalten, nach einer Prozedur welche "test" im Namen enthält
   proc:test;type:basis;module:gui         // Tja, liebe Kinder und Kinderinnen; das heraus zu finden ist eure Hausaufgabe...
   
   // auch das klappt
   test                           // finde alle Symbole welche.. ihr ahnt es schon....
   test;module:gui                     // alles wie erwartet...
Und nochmal: Das ist auf die Schnelle entstanden. Nicht schön. Ich gebe keine Funktions- aber eine Fehlergarantie. Verbesserungsvorschläge bzgl. Quelltext werden gekonnt ignoriert. Ideen und Beispiele was man ggf. mit dem Interface anfangen könnte, werden dankent zur Kenntnis genommen.

Evtl. klappt das ganze ab XE8. Aber da DX10 rauskam bevor ich mir die XE8 Demo ansehen konnte... Mit XE7 klappt nicht, mit DX10 klappt.

Viel Spaß.
Angehängte Dateien
Dateityp: zip sqlSearch.zip (7,1 KB, 5x aufgerufen)

mfg,
bp
  Mit Zitat antworten Zitat