xtool/contrib/mORMot/SQLite3/Samples/14 - Interface based services/Project14ServerExternal.dpr

61 lines
1.7 KiB
ObjectPascal

program Project14ServerExternal;
{ this sample will create the main SQLite3 DB as in-memory, but will define all
tables as external, in the same .db file than Project14Server
-> just to demonstrate VirtualTableExternalRegisterAll() function and
reproduce the https://synopse.info/forum/viewtopic.php?id=1008 issue }
{$APPTYPE CONSOLE}
uses
{$I SynDprUses.inc} // use FastMM4 on older Delphi, or set FPC threads
SysUtils,
mORMot,
mORMotSQLite3,
SynCommons, SynLog,
SynDB,
SynDBSQLite3, SynSQLite3, SynSQLite3Static,
mORMotDB,
Project14Interface;
type
TServiceCalculator = class(TInterfacedObject, ICalculator)
public
function Add(n1,n2: integer): integer;
end;
function TServiceCalculator.Add(n1, n2: integer): integer;
begin
result := n1+n2;
end;
var
aModel: TSQLModel;
aProps: TSQLDBSQLite3ConnectionProperties;
begin
aProps := TSQLDBSQLite3ConnectionProperties.Create(
StringToUtf8(ChangeFileExt(ExeVersion.ProgramFileName,'.db')),'','','');
try
aModel := TSQLModel.Create([TSQLAuthGroup,TSQLAuthUser],ROOT_NAME);
VirtualTableExternalRegisterAll(aModel,aProps);
try
with TSQLRestServerDB.Create(aModel,SQLITE_MEMORY_DATABASE_NAME,true) do
try
CreateMissingTables; // we need AuthGroup and AuthUser tables
ServiceDefine(TServiceCalculator,[ICalculator],sicShared);
if ExportServerNamedPipe(APPLICATION_NAME) then
writeln('Background server is running.'#10) else
writeln('Error launching the server'#10);
write('Press [Enter] to close the server.');
readln;
finally
Free;
end;
finally
aModel.Free;
end;
finally
aProps.Free;
end;
end.