#1 2025-11-17 11:51:45

idigger
Member
Registered: 2022-11-05
Posts: 21

Errors related to postgresql ORM.

Create the following table.

create table if not exists testtbl (
  id int4,
  prefix "char",
  flag char(1),
  start time not null default '08:30:00',
  stop time not null default '14:30:00');

insert into testtbl (id, prefix, flag, start, stop) values (1, 'P', '1', '08:30:00', '14:30:00'); 

Define the following ORM.

  TOrmtesttbl = class(TOrm)
  private
    fPrefix: AnsiChar;
    fFlag: AnsiChar;
    fStart: TTime;
    fStop: TTime;
  published
    property Prefix: AnsiChar read fPrefix write fPrefix;
    property Flag: AnsiChar read fFlag write fFlag;
    property Start: TTime read fStart write fStart;
    property Stop: TTime read fStop write fStop;
  end; 

The following program has an incorrect running result.

    DBProps := TSQLDBPostgresConnectionProperties.Create(
        'localhost', 'testdb', 'root', 'pass'); 
    DBProps.ThreadSafeConnection.Connect;
    Model := TOrmModel.Create([TOrmtesttbl]);
    OrmMapExternal(Model, [TOrmtesttbl], DBProps);

    Rest := TRestServerDB.Create(Model);
    Rest.Model.Owner := Rest;
    Rest.Server.CreateMissingTables;

    rec := Tormtesttbl.Create;
    if Rest.Retrieve(1, rec) then begin
      WriteLn('Prefix: ', rec.Prefix);    // print P   <-- ok
      WriteLn('Flag: ', rec.Flag);        // print 1   <-- ok
      WriteLn(rec.Start, ' ', rec.Stop);  // print 0.0000000000000000E+000  0.0000000000000000E+000  <-- error
    end;

    rec.Prefix := 'M';
    rec.Flag := '2';
    rec.Start := Time;
    rec.Stop := IncMinute(Time, 15);
    Rest.Add(rec, True);   // <-- ESqlDBException {Message:"Invalid TSqlDBPostgresStatement.Bind(2,TSqlDBFieldType(0),77)" 

Complete program.

Last edited by idigger (2025-11-17 11:53:52)

Offline

#2 2025-11-17 12:34:26

ab
Administrator
From: France
Registered: 2010-06-21
Posts: 15,293
Website

Re: Errors related to postgresql ORM.

TTime is not a supported ORM type.
TDateTime is.

Or at least is was not supported.
Did you try with the latest trunk?

Offline

#3 2025-11-17 12:47:10

idigger
Member
Registered: 2022-11-05
Posts: 21

Re: Errors related to postgresql ORM.

Yes, I try with the latest trunk.

ORM has errors in both the "char" and char(1) columns.

ESqlDBException {Message:"Invalid TSqlDBPostgresStatement.Bind(2,TSqlDBFieldType(0),77)"
or
ESqlDBPostgres {Message:"TSqlDBPostgresLib Exec failed: 22001 [ERROR:  value too long for type character(1)

Last edited by idigger (2025-11-17 12:52:25)

Offline

#4 2025-11-17 12:49:24

ab
Administrator
From: France
Registered: 2010-06-21
Posts: 15,293
Website

Re: Errors related to postgresql ORM.

And if you define the fields as TDateTime?

Offline

#5 2025-11-17 12:52:54

idigger
Member
Registered: 2022-11-05
Posts: 21

Re: Errors related to postgresql ORM.

TDateTime is Ok.

WriteLn(DateTimeToStr(rec.Start), ' ', DateTimeToStr(rec.Stop));
Output: 1899-12-30 8:30:00 1899-12-30 14:30:00
Time is Ok.

Last edited by idigger (2025-11-17 12:58:19)

Offline

#6 2025-11-18 08:19:17

idigger
Member
Registered: 2022-11-05
Posts: 21

Re: Errors related to postgresql ORM.

Does ORM not support postgresql's "char" and char(1)?

Last edited by idigger (2025-11-18 08:21:21)

Offline

#7 2025-11-18 08:23:22

ab
Administrator
From: France
Registered: 2010-06-21
Posts: 15,293
Website

Re: Errors related to postgresql ORM.

I guess it should.
What do you call "support"?

Try first to understand how our DB layer works.
It reduces the number of types to a reduced set, for efficiency and simplificy.
Look e.g. at https://synopse.info/files/html/Synopse … #TITLE_179

Offline

#8 2025-11-18 08:40:57

idigger
Member
Registered: 2022-11-05
Posts: 21

Re: Errors related to postgresql ORM.

    rec.Prefix := 'M';  // "char"
    rec.Flag := '2';    // char(1)
    rec.Start := Time;
    rec.Stop := IncMinute(Time, 15);
    Rest.Add(rec, True);   // <-- not work

Rest.Add(rec, True) not work.

ESqlDBException {Message:"Invalid TSqlDBPostgresStatement.Bind(2,TSqlDBFieldType(0),77)"
or
ESqlDBPostgres {Message:"TSqlDBPostgresLib Exec failed: 22001 [ERROR:  value too long for type character(1)

Offline

#9 2025-11-18 08:54:08

ab
Administrator
From: France
Registered: 2010-06-21
Posts: 15,293
Website

Re: Errors related to postgresql ORM.

Try at DB level.

Offline

#10 2025-11-18 08:59:32

idigger
Member
Registered: 2022-11-05
Posts: 21

Re: Errors related to postgresql ORM.

Ok. Thank you very much. I'll give it a try.

Offline

Board footer

Powered by FluxBB