Re: [fpc-pascal] fpc and Sqlite UDF

2009-11-06 Thread Luiz Americo Pereira Camara

Nataraj S Narayan escreveu:

Hi  Luiz

Getting this:-

 /software/fpc-uclibc/lib/fpc/2.5.1/ppcrossarm -MObjFPC -TLinux
-Parmv5 -gl -Xd -Xs -l -darm -XParm-linux-uclibcgnueabi- -CfSOFT
-CaEABI -darm -gl -O- -CpARMV5  -uUSE_LOCALIZE
-Fu/software/fpc-arm/units/arm-linux/ testfunction.pas
Free Pascal Compiler version 2.5.1 [2009/10/23] for arm
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Linux for ARM
Compiling testfunction.pas
testfunction.pas(25,66) Error: Identifier not found sqlite3_value_int
testfunction.pas(42,21) Error: Identifier not found sqlite3_result_int
testfunction.pas(59,23) Error: Identifier not found sqlite3_result_int
testfunction.pas(62,25) Error: Identifier not found sqlite3_result_int
testfunction.pas(65,27) Error: Identifier not found sqlite3_result_int
testfunction.pas(124) Fatal: There were 5 errors compiling module, stopping
Fatal: Compilation aborted


Any Sqlite version problem?

On SQLite version 3.4.2

  


It's compiling here both with fpc224 and 251 but for win32.

It seems a problem in the sqlite3 header for arm

Luiz
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] fpc and Sqlite UDF

2009-11-05 Thread Luiz Americo Pereira Camara

Nataraj S Narayan escreveu:

Hi

Anybody has written custom UDF for Sqlite 3 using fpc?

If so kindly help me with some hints to get started.
  


See the attached files. It implements a custom format date function

Luiz
program testfunction;

{$Mode ObjFpc}
{$H+}
{$define DEBUGHEAP}

uses 
{$ifdef DEBUGHEAP}
  Heaptrc,
{$endif}
{$ifdef Linux}
  cmem,
{$endif}
  sqlite3ds,
  sqlite3,  
  sysutils, db, 
  inifiles;
  

procedure CustomFunction(context: PSqlite3_Context; argc: LongInt; argv: PPSqlite3_Value); cdecl;
  procedure DumpVariable(Index: Integer);
  begin
case sqlite3_value_type(argv[Index]) of
SQLITE_INTEGER:
  WriteLn('Type: SQLITE_INTEGER - Value: ', sqlite3_value_int(argv[Index]),'  ' ,sqlite3_value_double(argv[Index]));  
SQLITE_NULL: 
  WriteLn('Type: SQLITE_NULL - Value: NULL');
SQLITE_FLOAT:
  writeln('Type: SQLITE_FLOAT - Value: ', sqlite3_value_double(argv[Index]));
SQLITE_TEXT:
  writeln('Type: SQLITE_TEXT - Value: ', sqlite3_value_text(argv[Index]));
else
  WriteLn('Type: Unknown - Value: ', sqlite3_value_text(argv[Index]));  
end;
  end;  
var
  i: Integer;  
begin
  WriteLn('argc: ', argc);
  for i := 0 to argc - 1 do
DumpVariable(i);
  sqlite3_result_int(context, 13);  
end;

procedure StrFTime(context: PSqlite3_Context; argc: LongInt; argv: PPSqlite3_Value); cdecl;  
var
  Year, Month, Day: word;
  FormatStr: String;
begin
  if (sqlite3_value_type(argv[1])  SQLITE_INTEGER) and 
(sqlite3_value_type(argv[1])  SQLITE_FLOAT) then
  begin
sqlite3_result_null(context);
Exit;
  end;
  FormatStr := UpperCase(sqlite3_value_text(argv[0]));
  DecodeDate(sqlite3_value_double(argv[1]), Year, Month, Day);
  if FormatStr = '%Y' then
sqlite3_result_int(context, Year)
  else
if FormatStr = '%M' then
  sqlite3_result_int(context, Month)
else
  if FormatStr = '%D' then
sqlite3_result_int(context, Day)
  else
sqlite3_result_null(context);
end;

  

const
  SQLITEDS_TESTS_INI_FILE = 'sqlitedstests.ini';
  DEFAULT_TABLENAME = 'tabletest';
  DEFAULT_FILENAME = 'test.db';
  
var 
  dsTest:TSqlite3Dataset;
  ini: TIniFile;

begin 
  {$ifdef DEBUGHEAP}
  SetHeapTraceOutput(ExtractFileName(ParamStr(0))+'.heap.log');
  {$endif}
  dsTest := TSqlite3Dataset.Create(nil);
  with dsTest do
  begin
//Load Database properties from a inifile
ini := TIniFile.Create(SQLITEDS_TESTS_INI_FILE);
FileName := ini.ReadString('testinfo', 'filename', DEFAULT_FILENAME);
TableName := ini.ReadString('testinfo', 'tablename', DEFAULT_TABLENAME);
ini.Destroy;
if not TableExists then
begin
  with FieldDefs do
  begin
Clear;
Add('Integer', ftAutoInc);
Add('String', ftString);
Add('DateTime', ftDateTime);
Add('Date', ftDate);
Add('Time', ftTime);
  end; 
  CreateTable;
end;
writeln('ReturnString after CreateTable: ', ReturnString);
Open;
sqlite3_create_function(SqliteHandle, 'strftime', 2, sqlite_any, nil, @strftime, nil, nil);
Append;
FieldByName('DateTime').AsDateTime := Now;
FieldByName('Date').AsDateTime := Date;
FieldByName('Time').AsDateTime := Time;
WriteLn('Date: ',FieldByName('Date').AsDateTime);
WriteLn('Time: ',FieldByName('Time').AsDateTime);
WriteLn('DateTime: ',FieldByName('DateTime').AsDateTime);
Post;
ApplyUpdates;
WriteLn(QuickQuery('Select strftime(''%Y'',Date) as mydate from '+ tablename +' limit 1;'));
WriteLn(QuickQuery('Select strftime(''%M'',Date) as mydate from '+ tablename +' limit 1;'));
WriteLn(QuickQuery('Select strftime(''%D'',DateTime) as mydate from '+ tablename +' limit 1;'));
Destroy;
  end;
end.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] fpc and Sqlite UDF

2009-11-05 Thread Nataraj S Narayan
Hi  Luiz

Getting this:-

 /software/fpc-uclibc/lib/fpc/2.5.1/ppcrossarm -MObjFPC -TLinux
-Parmv5 -gl -Xd -Xs -l -darm -XParm-linux-uclibcgnueabi- -CfSOFT
-CaEABI -darm -gl -O- -CpARMV5  -uUSE_LOCALIZE
-Fu/software/fpc-arm/units/arm-linux/ testfunction.pas
Free Pascal Compiler version 2.5.1 [2009/10/23] for arm
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Linux for ARM
Compiling testfunction.pas
testfunction.pas(25,66) Error: Identifier not found sqlite3_value_int
testfunction.pas(42,21) Error: Identifier not found sqlite3_result_int
testfunction.pas(59,23) Error: Identifier not found sqlite3_result_int
testfunction.pas(62,25) Error: Identifier not found sqlite3_result_int
testfunction.pas(65,27) Error: Identifier not found sqlite3_result_int
testfunction.pas(124) Fatal: There were 5 errors compiling module, stopping
Fatal: Compilation aborted


Any Sqlite version problem?

On SQLite version 3.4.2

regards

Nataraj

On Fri, Nov 6, 2009 at 1:56 AM, Luiz Americo Pereira Camara
luiz...@oi.com.br wrote:
 Nataraj S Narayan escreveu:

 Hi

 Anybody has written custom UDF for Sqlite 3 using fpc?

 If so kindly help me with some hints to get started.


 See the attached files. It implements a custom format date function

 Luiz

 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal