You are not logged in.
Hi to all,
I need some help with this, currently I'm working on a delphi project (mORMot server) on which there will be a thirdparty consuming services from a Javascript application, I am trying to give him a sample of authentication based on Esmondb posted code (well almost :-) the starting "/"+ has been removed from the $.get ), everything seems to be working but I'm not having success on getting a session, after debugging the following function on mORMot.pas :
function TSQLRestServerAuthenticationDefault.Auth(...
Begin
.
.
if not CheckPassword(Ctxt,User,aClientNonce,aPassWord) then
exit;
.
.
End;All boils down to the following check:
result := (aPassWord=SHA256(fServer.Model.Root+Nonce(false)+aSalt)) or
// if current nonce failed, tries with previous 5 minutes nonce
(aPassWord=SHA256(fServer.Model.Root+Nonce(true)+aSalt));Neither of them are giving the same Javascript generated password although after reading mORMot code and docs seems like if is being generated as is required by the mORMot framework.
For testing purposes I modified the sample 14 - Interface based services to use:
aServer.AuthenticationRegister(TSQLRestServerAuthenticationDefault);Tests are being made on Google Chrome console using the following line:
SynAuth.LogIn("http://localhost:888/root", "User", "synopse")and the last GET request sent to the server is something like this :
http://localhost:888/root/auth?UserName=User&Password=bd0ec39f2fba41a0b1dc40677e122cd8c03576c4445dcedc775b5d1605b3d60b&ClientNonce=55c6610c406e3aa72511df8ef24ee1c42b0490ff233385d8619d239f61c92d3cResult :
{
"ErrorCode":400,
"ErrorText":"Bad Request"
}Before making further research I would like to know If someone has some tested Javascript code sample which can succesfully authenticate with mORMot default authentication schema that would be so kind to share, I'm really having a hard time with it so any help would be much appreciated.
Regards,
Mocte
AB
I have been pretty busy last months hence I can't reply as soon as I wish, I just want to inform you that your DataSetToJSON function worked like a charm!
Thank you
Running the Project14ServerHttpWeak on Delphi XE I'm getting this error with the latest nightly build:
[DCC Error] SynSSPIAuth.pas(300): E2003 Undeclared identifier: 'GetTickCount64'The same project runs fine on Delphi 2007 and XE3
Also TestSQL3 fails on 2 tests for TDocVariant.
I'm not working at the moment on mORMot on XE, just downloaded the latest source and ran the Test and sample project 14 on all the versions of Delphi I have access to, so this is only FYI
Regards,
Mocte
Oh man you are awesome! I was working on something more or less like that but I wanted a shortcut ;-) I'm going to download it later and I will let you know how the things went.
I know TDataset is slow but the thing is I want to interact with some delphi made services (from third party application) which have a propietary protocol and are returning TDatasets, and I'm using mORMot to act as a bridge between these services and a Mobile application.
Thank you !
Hi to all,
Sorry if this is a silly question but I was wondering what would be the preferred way to return the data from three TDatasets into one TDocVariant, something like :
///Pseudocode
initialize TDocVariant variable with somevalues ( Id, Name, etc)
Loop through TDataset1
ds.first;
while not ds.eof do
Begin
¿ How to add the records to the TDocVariant ?
I know how to retrieve the fieldname/value pair from the TDataset but I'm struggling to find the way to build the JSON contents using TDocVariant
ds.Next;
End;
Loop through Tdataset2...
Loop through Tdataset2...So the final result would look like:
{"Id":"34356", "Name":"John Doe", "savings":[{"accountID":"345678","accName":"Some text","accBalance":"1.00"}, {"accountID":"345679","accName":"Another text","accBalance":"9.00"}], "loans": [{"accountID":"555678","accName":"Some text","accBalance":"1.00"}, {"accountID":"555679","accName":"Another text","accBalance":"9.00"}]}Don't know it the notation is right but I hope you get the idea.
Any hints?
Don't know if you have an old version, I just downloaded the nigthly build and the samples are there :
http://synopse.info/files/mORMotNightlyBuild.zip
Check it out
Hi Azeredobr,
I think you already have the sample, look into :
..\mORMot\SQLite3\SamplesRegards
Thank you
Arnaud,
Can you confirm if the best place to download the up to date documentation is:
http://synopse.info/files/pdf/Synopse%2 … 201.18.pdf
I mean if I download from this link it would already have the most recent changes?
Regards
I have to say it, you are right, you know you have a pretty large document and I did a search on it yesterday of the words "method based" and I swear I found only a few places where it was mentioned but after reading your answer I just did a new search and it is all over the place and most embarrassing is that I already read many of these pages, I don't know how happened maybe I spelled it wrong because you know english is not my native tongue, so what can I say I owe you an apology
.
I have almost no time for learn mORMot but I'm on my way so I'll be doing more silly questions from time to time
Thank you for your time and patience.
1. No authentication was enabled.
Indeed, but I thought some kind of default behavior was running behind the scenes, anyway that is just what I needed now.
2. This method is about method-based services, not interface-based service.
See the SAD 1.18 pdf document about the difference between the 2.
I can't find any topic on the SAD comparing them, AFAICS the following comment on mORMot.pas is what can explain better what you are saying :
TSQLRestServer = class; // published methods = RESTful callbacks handlersI think there should be a more prominent place describing the difference between method-based services vs interface-based services, or maybe I need better glasses ![]()
Regards
Thank you Arnaud, just FTR I commented the following line on the sample :
//aServer.AuthenticationRegister(TSQLRestServerAuthenticationNone);And now the browser answers happily the requests made with this pattern:
http://localhost:888/root/Calculator/Add?n1=10&n2=10Altough I have now the desired behavior, I still have two questions :
1. What is happening now that I commented "aServer.AuthenticationRegister"
2. Why "aServer.ServiceMethodByPassAuthentication('Calculator')" wasn't doing the job?
Please bear with me, these may be silly questions but are important for me.
![]()
Not so fast ;-)
I understand I can disable authentication following this instructions :
You can use TSQLRestServer.ServiceMethodByPassAuthentication() to disable the need of a signature for a given service method - e.g. it is the case for Auth and TimeStamp standard method services.
Doesn't seem to work, I added :
// register our ICalculator service on the server side
aServer.ServiceRegister(TServiceCalculator,[TypeInfo(ICalculator)],sicShared);
aServer.ServiceMethodByPassAuthentication('Calculator'); // <------ THISBut it doesn't seem to help with what I need, when I debug the call to ServiceMethodByPassAuthentication on mORMot.pas:
procedure TSQLRestServer.ServiceMethodByPassAuthentication(const aMethodName: RawUTF8);
var i: Integer;
begin
if self=nil then
exit;
i := fPublishedMethods.FindHashed(aMethodName);
if i>=0 then
fPublishedMethod[i].ByPassAuthentication := true;
end;fPublishedMethods.FindHashed always return a negative number and then then ByPassAuthentication is always false also used 'Add' as method without success
Any hint?
Thanks for the link Alex it is crystal clear now, I suppose it is time to read again those parts of the SAD document.
Thank you Alex for answering, unfortunately none of them gives the result, still getting 403 Forbidden, seems like it is some kind of permission is missing? or it was not intended to be used this way.
Hi to all,
I am now studying how to consume the interface based services from the browser (or Javascript for that matter), I am looking for the simplest way to consume the services from the Calculator service without authentication, so without writing any line of code I did the following:
1. Compile and run Project14ServerHttpWeak
2. Open the browser (chrome) and go to the address: http://localhost:888/root/Calculator/Add?n1=1&n2=2 ( Tried also with: ...Calculator.Add?n1=1&n2=2 )
I'm getting error code 403 Forbidden, so clearly I'm missing something, such error doesn't exist with e.g. Sample 04.
I'm not an expert on web programming hence I want to start from the simplest way and then adding complexity, I can see the following line of code on the server project and I thought it was all that was needed :
aServer.AuthenticationRegister(TSQLRestServerAuthenticationNone);Is there anything else that should be done in order to consume this service on the browser without authentication? I just want to type the URL and see the response from the server is it possible?
Regards,
Mocte
SAD 1.18 PDF page 170 :
Paragraph :
"You will need to specify also no the client side that those TSQLValue1 and TSQLValue2 tables are virtual."
Should be:
"You will need to specify also on the client side that those TSQLValue1 and TSQLValue2 tables are virtual."
Regards
Hi Arnaud,
What do you think? What can be done with this casing issue?
Hi to all,
A brief off-topic message just to wish you all mORMot users a Merry Christmas and a Happy new year.
Greetings and see you on the next bug ;-)
Mocte
Removing the IdentifierQuoting could resolve your issue but could lead to pain for others again. Let's wait for reply of Aranud.
Agreed, anyway is sunday night over here and I think is enough for today.
THANK YOU BOTH
If I run the query on pgAdmin changing the case on the table name :
SELECT n.nspname,c.relname,a.attname,a.atttypid,a.attnotnull,a.atttypmod,a.attlen,a.attnum,pg_get_expr(def.adbin, def.adrelid) as adsrc,dsc.description FROM pg_catalog.pg_namespace n JOIN pg_catalog.pg_class c ON (c.relnamespace = n.oid) JOIN pg_catalog.pg_attribute a ON (a.attrelid=c.oid) LEFT JOIN pg_catalog.pg_attrdef def ON (a.attrelid=def.adrelid AND a.attnum = def.adnum) LEFT JOIN pg_catalog.pg_description dsc ON (c.oid=dsc.objoid AND a.attnum = dsc.objsubid) LEFT JOIN pg_catalog.pg_class dc ON (dc.oid=dsc.classoid AND dc.relname='pg_class') LEFT JOIN pg_catalog.pg_namespace dn ON (dc.relnamespace=dn.oid AND dn.nspname='pg_catalog') WHERE a.attnum > 0 AND NOT a.attisdropped AND n.nspname = E'public' AND c.relname = E'samplerecord'This is changing: 'SampleRecord' to 'samplerecord'
The query runs successfully and returns the list of fields, note that the code creating the table is all from mORMot's sample, I'm only deleting the table before each run; I don't know it the table name should be on upper CamelCase or it should be on lowercase, and who determines that mORMot or ZEOS, but it seems the problem is there.
Thoughts?
Done,
Still failing, I did put a breakpoint on unit ZDbcPostgreSqlMetadata.pas, function :
TZPostgreSQLDatabaseMetadata.UncachedGetColumnsThe query on line :
with GetConnection.CreateStatement.ExecuteQuery(SQL) doSQL has the following select assigned :
SELECT n.nspname,c.relname,a.attname,a.atttypid,a.attnotnull,a.atttypmod,a.attlen,a.attnum,pg_get_expr(def.adbin, def.adrelid) as adsrc,dsc.description FROM pg_catalog.pg_namespace n JOIN pg_catalog.pg_class c ON (c.relnamespace = n.oid) JOIN pg_catalog.pg_attribute a ON (a.attrelid=c.oid) LEFT JOIN pg_catalog.pg_attrdef def ON (a.attrelid=def.adrelid AND a.attnum = def.adnum) LEFT JOIN pg_catalog.pg_description dsc ON (c.oid=dsc.objoid AND a.attnum = dsc.objsubid) LEFT JOIN pg_catalog.pg_class dc ON (dc.oid=dsc.classoid AND dc.relname='pg_class') LEFT JOIN pg_catalog.pg_namespace dn ON (dc.relnamespace=dn.oid AND dn.nspname='pg_catalog') WHERE a.attnum > 0 AND NOT a.attisdropped AND n.nspname = E'public' AND c.relname = E'SampleRecord'doesn't return data, neither running it on pgAdmin
Anything else? I'll be glad to give you anything you need :-D
I'm late to the party huh?

Arnaud, will this screenshot help you?
Regards
I will, altough I'm short of time, I'm afraid I will have to revert to 7.1 if it is taking much time to determine the cause :-(
Hi Arnaud,
I took a break from mORMot because I had another project to finish, I'm trying to get up to date with mORMot, downloaded "mORMot and Open Source friends-98387083f90b05a3.zip" and latest development branch from ZEOS (7.2) then I proceeded to run sample "15 - External db performance" and I'm getting the following error message :
TSQLRecordSample: external table creation public.SampleRecord failed: GetFields() returned nil - SQL="CREATE TABLE public.SampleRecord (ID INTEGER PRIMARY KEY, FirstName VARCHAR(40),LastName VARCHAR(40),Amount NUMERIC(19,4),BirthDate TIMESTAMP,LastChange BIGINT,CreatedAt BIGINT)"I can see the table is created in the database with the 7 fields but the test doesn't continue, the problem is on the following line :
DB.Execute(Model.GetSQLCreate(t)); // don't catch exception in constructorThis is the Execute procedure
procedure TSQLRequest.Execute(aDB: TSQLite3DB; const aSQL: RawUTF8);
begin
try
Prepare(aDB,aSQL); // will raise an ESQLite3Exception on error
Execute; <--- Fail
finally
Close; // always release statement, even if done normaly in Execute
end;
end;The aSQL parameter has the following string assigned :
'CREATE VIRTUAL TABLE Sample USING External(FirstName TEXT COLLATE SYSTEMNOCASE, LastName TEXT COLLATE SYSTEMNOCASE, Amount FLOAT, BirthDate TEXT COLLATE ISO8601, LastChange INTEGER, CreatedAt INTEGER);'Execute fails on the next function :
function TSQLRequest.Step: integer;
begin
if Request=0 then
raise ESQLite3Exception.Create(RequestDB,SQLITE_MISUSE);
result := sqlite3_check(RequestDB,sqlite3.step(Request)); <-- Here is generating some kind of error which in turn generates a Rollback
end; Don't know if this info is enough for you to help me, I ran before this sample with Zeos 7.2 and PostgreSQL 9.3 and this problem did not exist then, Do you remember some change on mORMot side that can cause this behavior? What can I do to have the sample running again?
TIA
Mocte
Hi to all,
I decided to discard UNIDAC testing, and instead test ZeosDBO 7.2 alpha, I was told by someone on the Zeos team that I can achieve better results with the alpha, so here are the results (previous and current) :
7.1
{
"Engine": "ZEOS",
"CreateTableTime": "58.21ms",
"NumberOfElements": 5000,
"InsertTime": "2.09s",
"InsertRate": 2386,
"InsertBatchTime": "1.97s",
"InsertBatchRate": 2532,
"InsertTransactionTime": "1.22s",
"InsertTransactionRate": 4087,
"InsertBatchTransactionTime": "1.23s",
"InsertBatchTransactionRate": 4041,
"ReadOneByOneTime": "1.27s",
"ReadOneByOneRate": 3932,
"ReadAllVirtualTime": "51.69ms",
"ReadAllVirtualRate": 96728,
"ReadAllDirectTime": "36.01ms",
"ReadAllDirectRate": 138819,
"ClientCloseTime": "4.06ms"
}7.2 alpha
{
"Engine": "ZEOS",
"CreateTableTime": "37.51ms",
"NumberOfElements": 5000,
"InsertTime": "1.71s",
"InsertRate": 2909,
"InsertBatchTime": "1.82s",
"InsertBatchRate": 2741,
"InsertTransactionTime": "1.01s",
"InsertTransactionRate": 4937,
"InsertBatchTransactionTime": "987.51ms",
"InsertBatchTransactionRate": 5063,
"ReadOneByOneTime": "1.01s",
"ReadOneByOneRate": 4924,
"ReadAllVirtualTime": "35.17ms",
"ReadAllVirtualRate": 142150,
"ReadAllDirectTime": "24.66ms",
"ReadAllDirectRate": 202708,
"ClientCloseTime": "3.73ms"
}The changes proposed by Delphinium on : http://synopse.info/forum/viewtopic.php?pid=8972#p8972 are needed, also I had to change:
procedure TSQLDBZEOSStatement.ExecutePrepared;
var
tmp: Types.TByteDynArray;to
procedure TSQLDBZEOSStatement.ExecutePrepared;
var
tmp: TArray<System.Byte>;I suppose is because of a change on Zeos side, don't know if can be added in a way that doesn't break code, for now I'm done with this benchmarkig stuff; the numbers show an improvement and are good enough for my needs so I will go the Zeos route, I have a project to start which will keep me asking for more of the mORMot ![]()
Regards
I'm not a big fan of ODBC, but in this case Would you say that it is worth?
Delphinium, nevermind I haven't had the time to test with Unidac but your numbers show that indeed ZEOS will be faster than Unidac, thanks for sharing.
Interested in :
- FPC (+ Synapse?);
- SmartMobileStudio;
- C# (WCF);
- Java.
Regards
Hi MPV, I didn't made any tunning on PostgreSQL installation the tests were ran with the configuration out of the box, so it can be enhanced but I was interested on a starting point to make comparisons between ZEOS and Unidac don't know if shoud be done in a different way, once I make a decision I will start to fine tunning the DB Engine; and about 32 bits PG, I'm not using the 32 bits version because I have Win64 installed on this VM and wanted a 64 bits version also, and the production environment would be 64 bits (windows server 2008 or 2012) as I'm new to PG I needed to see possible shortcomings on an environment as similar as production ( if I can say such ting ;-) ), I've read on another post Arnaud commented 64 bits support on mORMot side was not complete but I can live with that for a while.
Thank you for your advice I really appreciate it.
Thank you MVP, I heard the same although this answer on stackoverflow makes me think the gap is closing: http://stackoverflow.com/questions/8368 … t-versions , may be in the future when mORMot will work fine in Lazarus and has an alternative to http.sys I can make the switch to Linux on server but by now I don't want to have the mORMot server(windows) and the database server(linux) on separate machines, perhaps worth the test but spending on two servers is another thing we would like to avoid.
What do you think of this numbers on Windows ?
With:
fUseCache := false; // caching is to be disabled - not found stable enough
{
"Engine": "ZEOS",
"CreateTableTime": "67.37ms",
"NumberOfElements": 5000,
"InsertTime": "4.48s",
"InsertRate": 1115,
"InsertBatchTime": "4.51s",
"InsertBatchRate": 1107,
"InsertTransactionTime": "3.47s",
"InsertTransactionRate": 1438,
"InsertBatchTransactionTime": "3.29s",
"InsertBatchTransactionRate": 1517,
"ReadOneByOneTime": "3.67s",
"ReadOneByOneRate": 1358,
"ReadAllVirtualTime": "76.52ms",
"ReadAllVirtualRate": 65338,
"ReadAllDirectTime": "56.28ms",
"ReadAllDirectRate": 88836,
"ClientCloseTime": "4.01ms"
}
With :
fUseCache := true; // caching is to be disabled - not found stable enough
{
"Engine": "ZEOS",
"CreateTableTime": "58.21ms",
"NumberOfElements": 5000,
"InsertTime": "2.09s",
"InsertRate": 2386,
"InsertBatchTime": "1.97s",
"InsertBatchRate": 2532,
"InsertTransactionTime": "1.22s",
"InsertTransactionRate": 4087,
"InsertBatchTransactionTime": "1.23s",
"InsertBatchTransactionRate": 4041,
"ReadOneByOneTime": "1.27s",
"ReadOneByOneRate": 3932,
"ReadAllVirtualTime": "51.69ms",
"ReadAllVirtualRate": 96728,
"ReadAllDirectTime": "36.01ms",
"ReadAllDirectRate": 138819,
"ClientCloseTime": "4.06ms"
}
Remember this is on a Win64 VM with 2 GB de RAM(1600Mhz DDR3), 2.7 Ghz core i7 I know I could use bootcamp on my MBP but I don't want to do that.
Don't know if the comment about cache stability is still valid but I would like to know, may be tomorrow I will test against latest Unidac and can make some conclusions.
BTW had to comment the following lines from the tests :
Test(nil,'','','','','SQLite3 (file full)',true,smFull);
Test(nil,'','','','','SQLite3 (file off)',true,smOff);
Test(nil,'','','','','SQLite3 (file off exc)',true,smOff,lmExclusive);because was getting an AV on :
if (aServerName='') and
not PropsClass.InheritsFrom(TODBCConnectionProperties) then beginJust FYI I was only interested in PG tests by now.
Regards
Thank you both and thanks Arnaud for answering in sunday :-D I wasn't expecting an answer until monday, I don't know if I can work on this today but I'll post results when I get the time.
Best regards.
Thanks for the info Arnaud, I'm trying to run your benchmarks and I'm only testing Unidac and ZEOS, I saw on devart forums they are on v 5.1.3 I will see if I can test with the latest version.
I'm not able to provide any feedback yet because I'm starting with PostgreSQL, I have developed many applications using Firebird as database server with great success, some also targeting MSSQL Express, and now I have a new project which will be very data intensive (expecting a million records at least on our main table on the first month on production) and I'm very interested in some features out of the box of PostgreSQL like schemas, hstore, json and xml data type, replication among others, I was a little worried about choosing PG but I've heard nice things about it and the National Institute for Geography and Statistical here in Mexico is using PG so I think is a safe bet.
I'll keep you informed of my findings.
Hi to all,
Has anyone done any testing with mORMot, ZEOS and PostgreSQL combo? I'm trying to run the sample "15 - External DB performance" without success, first my environment :
Windows 7 64 bits on a VM with 2GB RAM
PostgreSQL 9.3.1 64 bits
Delphi XE3
Zeos 7.1 stable (7.1.2)
mORMot 1.18
I modified the sample project:
1. Enabled USEZEOS directive
2. Commented the tests for SQLLite/Firebird using ZEOS
3. Added the following test :
Test(TSQLDBZEOSConnectionProperties,
TSQLDBZEOSConnectionProperties.URI(dPostgreSQL,'libpq.dll'),'test','postgres','nnnn','',false); //<--- Compiling the tests with 32 bits profile so libpq.dll is 32 bits
4. I came accross this constructor on SynDBZeos :
constructor TSQLDBZEOSConnectionProperties.Create(const aServerName, aDatabaseName, aUserID, aPassWord: RawUTF8);
const
PCHARS: array[0..6] of PUTF8Char = (
'ORACLE','FREETDS_MSSQL','MSSQL','INTERBASE','FIREBIRD','MYSQL','SQLITE');
TYPES: array[-1..high(PCHARS)] of TSQLDBDefinition = (
dDefault,dOracle,dMSSQL,dMSSQL,dFirebird,dFirebird,dMySQL,dSQLite);
// expecting Postgresql + Sybase + ASA support in TSQLDBDefinition
begin
fServerName := aServerName;
if (fServerName<>'') and (PosEx(':',fServerName)=0) then
fServerName := fServerName+':';
if not IdemPChar(Pointer(aServerName),'ZDBC:') then
fServerName := 'zdbc:'+fServerName;
fURL := TZURL.Create(UTF8ToString(fServerName));
if fURL.Database='' then
fURL.Database := UTF8ToString(aDatabaseName);
if fURL.UserName='' then
fURL.UserName := UTF8ToString(aUserID);
if fURL.Password='' then
fURL.Password := UTF8ToString(aPassWord);
fDBMSName := StringToUTF8(fURL.Protocol);
fDBMS := TYPES[IdemPCharArray(pointer(fDBMSName),PCHARS)];
inherited Create(aServerName,aDatabaseName,aUserID,aPassWord);
fURL.Properties.Add('controls_cp=CP_UTF8');
fUseCache := false; // caching is to be disabled - not found stable enough
case fDBMS of
dSQLite: begin // ZEOS support of SQLite3 is just buggy
fSQLCreateField[ftInt64] := ' BIGINT'; // SQLite3 INTEGER = 32bit for ZDBC!
end;
dFirebird: begin
if not FileExists(fURL.Database) then
fURL.Properties.Add('createNewDatabase='+UTF8ToString(
SQLCreateDatabase(StringToUTF8(fURL.Database))));
fUseCache := true; // caching rocks with Firebird ZDBC provider :)
end;
dOracle:
fUseCache := true;
end;
end;As you can see neither PCHARS nor TYPES contains PostgreSQL driver related references, and this is what is passed to aServerName on constructor TSQLDBConnectionProperties :
postgresql-9:?LibLocation=C:\CM\mORMot\SQLite3\Samples\15 - External DB performance\libpq.dll
and finally on mORMot SQLite3 the line :
DB.Execute(Model.GetSQLCreate(t)); // don't catch exception in constructorBreaks the execution with the message :
Requested database driver was not found.
Which seems is an exception of ZEOS library because is not locating libpq.dll but I don't think is the case because the DBC sample included with ZEOS components is connecting just fine with the following URL: 'zdbc:postgresql-9://localhost/test?UID=postgres;PWD=nnnn' which doesn't look like the one constructed by TSQLDBZEOSConnectionProperties so I'm concluding that ZEOS + PostgreSQL support on mORMot is incomplete.
I don't know if others have succeeded with this but I would like to know.
Thank you
Hi Arnaud,
Just curious, could you please post more info about the data access libraries used for the updated benchmarks on: http://blog.synopse.info/post/2013/11/0 … ing-MS-SQL, I mean the version of UniDAC, Zeos, Firedac? I'm evaluating PostgreSQL to be used with mORMot and I am also looking for the faster library, you said nice things about ZEOS on the post and if my memory serves me well you were in touch with one of the core developers so your feedback is very valuable for me, I have had experience with Unidac, Firedac is not included in my Delphi version and also as you know I would like to switch to FPC/Lazarus (server side at least) so maybe the options are reduced to UniDac vs Zeos, and I want to run the benchmarks on my computer and because of that I'm asking: Did you used the latest versions on your tests? Can you recommend one over the other? What is your experience with them ? or maybe you have SynDBPostgreSQL.pas ;-) hidden somewhere?
Best regards
Thanks Arnaud, I'm currently reading your SAD Document and I'm far from finishing I'll see what can I do to help once I get used to mORMot philosophy.
Hi Arnaud,
How is Lazarus support going? I'm not thinking on cross-platform compiling but Windows only, seems like is perfectly possible to have mORMot on the server side and Web based clients (with some Javascript framework, AngularJS, Ember, etc) I'm asking because I recently updated my Delphi pro license to XE3, we now have XE4 and I see XE5 is just around the corner; I can't just afford upgrading at the pace of embarcadero and also I don't think the upgrades are worth, so I am now serious about leaving Delphi but staying a little bit longer with Object Pascal and for that matter I would opt for FPC/Lazarus, Can you please share with us what is the current status/plans about this subject?
With regards,
Mocte
Server side (on order of preference) :
1. Linux
2. Windows
Client side :
AFAIK mORMot can serve REST/AJAX so it can be any platform, I have planned some GUI development so Lazarus could serve for that purpose on Win/Linux (haven't seen much Mac OS noise on their forums ) and for the WEB well I haven't made my mind on this yet, there are so many options and I'm evaluating some of them, same goes for mobile.
Thank you.
Hi Arnaud,
I'm not a mORMot user but a Delphi user, and I'm looking for excuses to make the switch to FPC/Lazarus so If you had a Lazarus mORMot version of the framework I would be tempted to try it on a new project I have on standby for a while.
Best regards,
Mocte