AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Select Methode From Unit Where Unit.name starting with "abc" and methode.1tePar...
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von bepe · begonnen am 20. Sep 2015 · letzter Beitrag vom 20. Sep 2015
Antwort Antwort
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
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 20. Sep 2015, 13:30
Spannende Sache - Danke für's herausfinden und testen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz