Skip to content

Commit aaa904d

Browse files
author
Grahame Grieve
committed
Start working on full text search + fix up command line handling for console install + fix double free on LangList
1 parent 5779648 commit aaa904d

40 files changed

+908
-374
lines changed

library/fdb/fdb_fts.pas

+165
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
unit fdb_fts;
2+
3+
{$i fhir.inc}
4+
5+
interface
6+
7+
uses
8+
Classes, SysUtils,
9+
fsl_base, fsl_utilities,
10+
fdb_manager, fdb_sqlite3;
11+
12+
Type
13+
{ TFDBFullTextSearchCompartment }
14+
15+
TFDBFullTextSearchCompartment = class (TFslObject)
16+
private
17+
FName: String;
18+
public
19+
constructor Create(name : String);
20+
property name : String read FName write FName;
21+
end;
22+
23+
{ TFDBFullTextSearch }
24+
25+
TFDBFullTextSearch = {abstract} class (TFslObject)
26+
private
27+
FName : string;
28+
public
29+
constructor Create(name : String);
30+
function link : TFDBFullTextSearch;
31+
32+
Property name : String read FName;
33+
function createCompartment(name : String) : TFDBFullTextSearchCompartment; virtual; abstract;
34+
procedure addText(compartment : TFDBFullTextSearchCompartment; id : String; name, text : string); virtual; abstract;
35+
function closeCompartment(compartment : TFDBFullTextSearchCompartment) : String; virtual; abstract;
36+
37+
procedure search(compartment : String; criteria : String; ids : TStringList); virtual; abstract;
38+
end;
39+
40+
{ TFDBSqlLiteFullTextSearchCompartment }
41+
42+
TFDBSqlLiteFullTextSearchCompartment = class (TFDBFullTextSearchCompartment)
43+
private
44+
FConn : TFDBConnection;
45+
public
46+
constructor create(name : String; Conn : TFDBConnection);
47+
property Conn : TFDBConnection read FConn;
48+
end;
49+
50+
TFDBSqlLiteFullTextSearch = class (TFDBFullTextSearch)
51+
private
52+
FDB : TFDBSQLiteManager;
53+
public
54+
constructor create(name : string; db : TFDBSQLiteManager);
55+
destructor Destroy; override;
56+
57+
function createCompartment(name : String) : TFDBFullTextSearchCompartment; override;
58+
procedure addText(compartment : TFDBFullTextSearchCompartment; id : String; name, text : string); override;
59+
function closeCompartment(compartment : TFDBFullTextSearchCompartment) : String; override;
60+
61+
procedure search(compartment : String; criteria : String; ids : TStringList); override;
62+
end;
63+
64+
{ TFDBFullTextSearchFactory }
65+
66+
TFDBFullTextSearchFactory = class (TFslObject)
67+
public
68+
class function makeSQLiteTextSearch(name : String) : TFDBFullTextSearch;
69+
end;
70+
71+
implementation
72+
73+
{ TFDBFullTextSearchFactory }
74+
75+
class function TFDBFullTextSearchFactory.makeSQLiteTextSearch(name : String): TFDBFullTextSearch;
76+
var
77+
fn : String;
78+
begin
79+
fn := FilePath(['[tmp]', 'fts-'+name+'.db']);
80+
deleteFile(fn);
81+
result := TFDBSqlLiteFullTextSearch.create(name, TFDBSQLiteManager.create('fts-'+name, fn, true));
82+
end;
83+
84+
{ TFDBSqlLiteFullTextSearchCompartment }
85+
86+
constructor TFDBSqlLiteFullTextSearchCompartment.create(name: String; Conn: TFDBConnection);
87+
begin
88+
inherited Create(name);
89+
FConn := Conn;
90+
end;
91+
92+
{ TFDBFullTextSearchCompartment }
93+
94+
constructor TFDBFullTextSearchCompartment.create(name: String);
95+
begin
96+
inherited Create;
97+
FName := name;
98+
end;
99+
100+
{ TFDBSqlLiteFullTextSearch }
101+
102+
constructor TFDBSqlLiteFullTextSearch.create(name : String; db: TFDBSQLiteManager);
103+
begin
104+
inherited create(name);
105+
FDB := db;
106+
end;
107+
108+
destructor TFDBSqlLiteFullTextSearch.Destroy;
109+
begin
110+
FDB.Free;
111+
inherited Destroy;
112+
end;
113+
114+
function TFDBSqlLiteFullTextSearch.createCompartment(name: String): TFDBFullTextSearchCompartment;
115+
var
116+
conn : TFDBConnection;
117+
begin
118+
conn := FDB.GetConnection('compartment');
119+
conn.ExecSQL('CREATE VIRTUAL TABLE '+name+' USING fts5(id, name, content);');
120+
conn.SQL := 'Insert into '+name+' (id, name, content) values (:id, :name, :content)';
121+
conn.Prepare;
122+
result := TFDBSqlLiteFullTextSearchCompartment.create(name, conn);
123+
end;
124+
125+
procedure TFDBSqlLiteFullTextSearch.addText(compartment: TFDBFullTextSearchCompartment; id: String; name, text: string);
126+
var
127+
conn : TFDBConnection;
128+
begin
129+
conn := (compartment as TFDBSqlLiteFullTextSearchCompartment).Conn;
130+
conn.BindString('id', id);
131+
conn.BindString('name', name);
132+
conn.BindString('content', text);
133+
conn.Execute;
134+
end;
135+
136+
function TFDBSqlLiteFullTextSearch.closeCompartment(compartment: TFDBFullTextSearchCompartment) : String;
137+
var
138+
conn : TFDBConnection;
139+
begin
140+
conn := (compartment as TFDBSqlLiteFullTextSearchCompartment).Conn;
141+
conn.Terminate;
142+
result := inttostr(conn.CountSQL('Select count(*) from '+compartment.name))+' Entries';
143+
conn.Release;
144+
end;
145+
146+
procedure TFDBSqlLiteFullTextSearch.search(compartment: String; criteria: String; ids: TStringList);
147+
begin
148+
// not done yet
149+
end;
150+
151+
{ TFDBFullTextSearch }
152+
153+
constructor TFDBFullTextSearch.Create(name: String);
154+
begin
155+
inherited Create;
156+
FName := name;
157+
end;
158+
159+
function TFDBFullTextSearch.link: TFDBFullTextSearch;
160+
begin
161+
result := TFDBFullTextSearch(inherited link);
162+
end;
163+
164+
end.
165+

library/fhir/fhir_oauth.pas

+1-1
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ function templateSource : String;
694694
constructor TSmartAppLaunchLogin.Create;
695695
begin
696696
inherited;
697-
FlogoPath := FilePath([ExtractFilePath(paramstr(0)), ChangeFileExt(executableDirectory(), '.png')]);
697+
FlogoPath := FilePath([ExtractFilePath(paramstr(0)), ChangeFileExt(TCommandLineParameters.execDir, '.png')]);
698698
FTemplate := templateSource;
699699
end;
700700

0 commit comments

Comments
 (0)