Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2021-03

Cannot write datetime field on sqlite3 database on ARM

16 messages · 6 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Toru Takubo

Hi,

I am developing my app on Windows and building apps for other platforms by using cross compiler. Now I have a problem only occurred on Linux ARM.

The problem is that it cannot write datetime field on sqlite3 database. It can read/write other fields like int, varchar or blob, but always write zero in datetime (maybe float as well) field.

Does anyone have an idea about this issue? I am not sure it is fpc issue, but better to report bug?

My observations are as follows:

1. I work with Lazarus 2.0.12/FPC 3.2.0 release version.
2. Target machine is Raspberry Pi OS on Raspberry Pi 3 Model B V1.2.
3. My app consists of sqlite3conn and sqldb unit.
4. The problem occurred on Linux ARM. It does NOT on Windows i386/x86_64, Linux i386/x86_64 and Linux AArch64.
5. I installed "DB Browser for SQLite" on Raspi as a reference. It can write datetime field normally. My app can read it.

Toru

Reply by email

Michael Van Canneyt
to Toru Takubo
Toru Takubo wrote 13 lines
Hi, I am developing my app on Windows and building apps for other platforms by using cross compiler. Now I have a problem only occurred on Linux ARM. The problem is that it cannot write datetime field on sqlite3 database. It can read/write other fields like int, varchar or blob, but always write zero in datetime (maybe float as well) field. Does anyone have an idea about this issue? I am not sure it is fpc issue, but better to report bug?

It sounds like a floating point problem. As you probably know, a TDateTime type is actually a double type. Did you try with a float value ?

The DB explorer tools probably just use strings to read/write from the database, so they will not be bothere by such things, but FPC stores dataset values in 'native' formats in memory.

I don't know what to advise to further investigate the issue, One thing to try would be to test whether normal float arithmetic or date arithmetic works. If not, then the compiler people will need to give more advice.

Michael.

Reply by email

Toru Takubo
to Michael Van Canneyt
Michael Van Canneyt wrote 29 lines
On Mon, 8 Mar 2021, Toru Takubo via fpc-pascal wrote: > Hi, > > I am developing my app on Windows and building apps for other > platforms by using cross compiler. Now I have a problem only > occurred on Linux ARM. > > The problem is that it cannot write datetime field on sqlite3 > database. It can read/write other fields like int, varchar > or blob, but always write zero in datetime (maybe float as well) > field. > > Does anyone have an idea about this issue? I am not sure it is > fpc issue, but better to report bug? It sounds like a floating point problem. As you probably know, a TDateTime type is actually a double type. Did you try with a float value ? The DB explorer tools probably just use strings to read/write from the database, so they will not be bothere by such things, but FPC stores dataset values in 'native' formats in memory. I don't know what to advise to further investigate the issue, One thing to try would be to test whether normal float arithmetic or date arithmetic works. If not, then the compiler people will need to give more advice.

I created a simple test code, and ran on linux-i386 and linux-arm. Test on linux-i386 is OK but on linux-arm, I got unexpected values "30-12-99" as datetime and "2.12199579096527E-314" as float, which are different from values previously set. (except INT and VARCHAR fields)

---linux-i386-------------------------------------------- INT, VARCHAR, DATETIME, DOUBLE 0, 9-3-21 08:50:23, 9-3-21 08:50:23, 0
1, 9-3-21 12:16:06, 9-3-21 12:16:06, 0.142857142857143 2, 9-3-21 15:41:49, 9-3-21 15:41:49, 0.285714285714286 3, 9-3-21 19:07:32, 9-3-21 19:07:32, 0.428571428571429 4, 9-3-21 22:33:15, 9-3-21 22:33:15, 0.571428571428571 5, 10-3-21 01:58:58, 10-3-21 01:58:58, 0.714285714285714 6, 10-3-21 05:24:40, 10-3-21 05:24:40, 0.857142857142857 7, 10-3-21 08:50:23, 10-3-21 08:50:23, 1
8, 10-3-21 12:16:06, 10-3-21 12:16:06, 1.14285714285714 9, 10-3-21 15:41:49, 10-3-21 15:41:49, 1.28571428571429

---linux-arm--------------------------------------------- INT, VARCHAR, DATETIME, DOUBLE 0, 9-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 1, 9-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 2, 9-3-21 15:47:18, 30-12-99, 2.12199579096527E-314 3, 9-3-21 19:13:01, 30-12-99, 2.12199579096527E-314 4, 9-3-21 22:38:44, 30-12-99, 2.12199579096527E-314 5, 10-3-21 02:04:27, 30-12-99, 2.12199579096527E-314 6, 10-3-21 05:30:10, 30-12-99, 2.12199579096527E-314 7, 10-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 8, 10-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 9, 10-3-21 15:47:19, 30-12-99, 2.12199579096527E-314

I used a shared library libsqlite3.so included in the "DB Browser for SQLite", so it should work. What can cause such a problem only in the specific field on the specific platform?

Thank you in advance for any advice.

Toru

Reply by email

Michael Van Canneyt
to Toru Takubo
Toru Takubo wrote 37 lines
> I don't know what to advise to further investigate the issue, One thing to > try would be to test whether normal float arithmetic or date arithmetic > works. > If not, then the compiler people will need to give more advice. > I created a simple test code, and ran on linux-i386 and linux-arm. Test on linux-i386 is OK but on linux-arm, I got unexpected values "30-12-99" as datetime and "2.12199579096527E-314" as float, which are different from values previously set. (except INT and VARCHAR fields) ---linux-i386-------------------------------------------- INT, VARCHAR, DATETIME, DOUBLE 0, 9-3-21 08:50:23, 9-3-21 08:50:23, 0 1, 9-3-21 12:16:06, 9-3-21 12:16:06, 0.142857142857143 2, 9-3-21 15:41:49, 9-3-21 15:41:49, 0.285714285714286 3, 9-3-21 19:07:32, 9-3-21 19:07:32, 0.428571428571429 4, 9-3-21 22:33:15, 9-3-21 22:33:15, 0.571428571428571 5, 10-3-21 01:58:58, 10-3-21 01:58:58, 0.714285714285714 6, 10-3-21 05:24:40, 10-3-21 05:24:40, 0.857142857142857 7, 10-3-21 08:50:23, 10-3-21 08:50:23, 1 8, 10-3-21 12:16:06, 10-3-21 12:16:06, 1.14285714285714 9, 10-3-21 15:41:49, 10-3-21 15:41:49, 1.28571428571429 ---linux-arm--------------------------------------------- INT, VARCHAR, DATETIME, DOUBLE 0, 9-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 1, 9-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 2, 9-3-21 15:47:18, 30-12-99, 2.12199579096527E-314 3, 9-3-21 19:13:01, 30-12-99, 2.12199579096527E-314 4, 9-3-21 22:38:44, 30-12-99, 2.12199579096527E-314 5, 10-3-21 02:04:27, 30-12-99, 2.12199579096527E-314 6, 10-3-21 05:30:10, 30-12-99, 2.12199579096527E-314 7, 10-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 8, 10-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 9, 10-3-21 15:47:19, 30-12-99, 2.12199579096527E-314

thank you for the test program. I tested on linux 64-bit, that works OK too.

When you look in the database on the arm machine  with an sqlite tool, do
you see the correct values or are the inserted values wrong ?

(I'm trying to establish whether the problem happens during read or write)

Show quoted text 5 lines
I used a shared library libsqlite3.so included in the "DB Browser for SQLite", so it should work. What can cause such a problem only in the specific field on the specific platform?

Seems like either a floating point issue, or an alignment issue. I know ARM has some specific behaviour with regard to alignment.

Unfortunately, I have no idea what to test or the means to test it. Someone more familiar with ARM will need ro test.

Michael.

Reply by email

Cappelletto Gabriele
to Toru Takubo: I am developing my app on Windows and building apps for other platforms by using cross…

It happened to me with firebird too. Same mistake.

Il 08/03/21 02:31, Toru Takubo via fpc-pascal ha scritto:

Show quoted text 29 lines
Hi, I am developing my app on Windows and building apps for other platforms by using cross compiler. Now I have a problem only occurred on Linux ARM. The problem is that it cannot write datetime field on sqlite3 database. It can read/write other fields like int, varchar or blob, but always write zero in datetime (maybe float as well) field. Does anyone have an idea about this issue? I am not sure it is fpc issue, but better to report bug? My observations are as follows: 1. I work with Lazarus 2.0.12/FPC 3.2.0 release version. 2. Target machine is Raspberry Pi OS on Raspberry Pi 3 Model B V1.2. 3. My app consists of sqlite3conn and sqldb unit. 4. The problem occurred on Linux ARM. It does NOT on Windows i386/x86_64,  Linux i386/x86_64 and Linux AArch64. 5. I installed "DB Browser for SQLite" on Raspi as a reference. It can  write datetime field normally. My app can read it. Toru _______________________________________________ fpc-pascal maillist  -  https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply by email

Gabriele Cappelletto
to Toru Takubo: I am developing my app on Windows and building apps for other platforms by using cross…

It happened to me with Firebird too. Only that the error gave it to me in reading, that is db.fieldByName ('cc'). AsDateTime

Il 08/03/21 02:31, Toru Takubo via fpc-pascal ha scritto:

Show quoted text 29 lines
Hi, I am developing my app on Windows and building apps for other platforms by using cross compiler. Now I have a problem only occurred on Linux ARM. The problem is that it cannot write datetime field on sqlite3 database. It can read/write other fields like int, varchar or blob, but always write zero in datetime (maybe float as well) field. Does anyone have an idea about this issue? I am not sure it is fpc issue, but better to report bug? My observations are as follows: 1. I work with Lazarus 2.0.12/FPC 3.2.0 release version. 2. Target machine is Raspberry Pi OS on Raspberry Pi 3 Model B V1.2. 3. My app consists of sqlite3conn and sqldb unit. 4. The problem occurred on Linux ARM. It does NOT on Windows i386/x86_64,  Linux i386/x86_64 and Linux AArch64. 5. I installed "DB Browser for SQLite" on Raspi as a reference. It can  write datetime field normally. My app can read it. Toru _______________________________________________ fpc-pascal maillist  -  https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply by email

Toru Takubo
to Michael Van Canneyt: thank you for the test program. I tested on linux 64-bit, that works OK too. When you…
Michael Van Canneyt wrote 47 lines
On Tue, 9 Mar 2021, Toru Takubo via fpc-pascal wrote: >> I don't know what to advise to further investigate the issue, One thing to >> try would be to test whether normal float arithmetic or date arithmetic works. >> If not, then the compiler people will need to give more advice. >> > > I created a simple test code, and ran on linux-i386 and linux-arm. > Test on linux-i386 is OK but on linux-arm, I got unexpected values > "30-12-99" as datetime and "2.12199579096527E-314" as float, which are different > from values previously set. (except INT and VARCHAR fields) > > ---linux-i386-------------------------------------------- > INT, VARCHAR,           DATETIME,           DOUBLE > 0, 9-3-21 08:50:23, 9-3-21 08:50:23, 0 > 1, 9-3-21 12:16:06, 9-3-21 12:16:06, 0.142857142857143 > 2, 9-3-21 15:41:49, 9-3-21 15:41:49, 0.285714285714286 > 3, 9-3-21 19:07:32, 9-3-21 19:07:32, 0.428571428571429 > 4, 9-3-21 22:33:15, 9-3-21 22:33:15, 0.571428571428571 > 5, 10-3-21 01:58:58, 10-3-21 01:58:58, 0.714285714285714 > 6, 10-3-21 05:24:40, 10-3-21 05:24:40, 0.857142857142857 > 7, 10-3-21 08:50:23, 10-3-21 08:50:23, 1 > 8, 10-3-21 12:16:06, 10-3-21 12:16:06, 1.14285714285714 > 9, 10-3-21 15:41:49, 10-3-21 15:41:49, 1.28571428571429 > > ---linux-arm--------------------------------------------- > INT, VARCHAR,           DATETIME,           DOUBLE > 0, 9-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 > 1, 9-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 > 2, 9-3-21 15:47:18, 30-12-99, 2.12199579096527E-314 > 3, 9-3-21 19:13:01, 30-12-99, 2.12199579096527E-314 > 4, 9-3-21 22:38:44, 30-12-99, 2.12199579096527E-314 > 5, 10-3-21 02:04:27, 30-12-99, 2.12199579096527E-314 > 6, 10-3-21 05:30:10, 30-12-99, 2.12199579096527E-314 > 7, 10-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 > 8, 10-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 > 9, 10-3-21 15:47:19, 30-12-99, 2.12199579096527E-314 thank you for the test program. I tested on linux 64-bit, that works OK too. When you look in the database on the arm machine  with an sqlite tool, do you see the correct values or are the inserted values wrong ? (I'm trying to establish whether the problem happens during read  or write)

Looking into the database with "DB Browser for SQLite", those fields are all "0". If you set some value in those fields by the tool, you can read them with fpc program. Therefore problem happens on writing values, I believe.

Show quoted text 11 lines
> > I used a shared library libsqlite3.so included in the "DB Browser for SQLite", > so it should work. What can cause such a problem only in the specific field > on the specific platform? Seems like either a floating point issue, or an alignment issue. I know ARM has some specific behaviour with regard to alignment. Unfortunately, I have no idea what to test or the means to test it. Someone more familiar with ARM will need ro test.

It would be better for me to create a bug report?

Toru

Reply by email

Michael Van Canneyt
to Toru Takubo
Toru Takubo wrote 14 lines
> > thank you for the test program. I tested on linux 64-bit, that works OK too. > > When you look in the database on the arm machine  with an sqlite tool, do > you see the correct values or are the inserted values wrong ? > > (I'm trying to establish whether the problem happens during read  or write) > Looking into the database with "DB Browser for SQLite", those fields are all "0". If you set some value in those fields by the tool, you can read them with fpc program. Therefore problem happens on writing values, I believe.

It certainly seems so, yes.

Show quoted text 13 lines
>> I used a shared library libsqlite3.so included in the "DB Browser for SQLite", >> so it should work. What can cause such a problem only in the specific field >> on the specific platform? > > Seems like either a floating point issue, or an alignment issue. > I know ARM has some specific behaviour with regard to alignment. > > Unfortunately, I have no idea what to test or the means to test it. > Someone more familiar with ARM will need ro test. > It would be better for me to create a bug report?

At this point I think this would indeed be necessary.

So, yes, please add a bugreport !

Michael.

Reply by email

LacaK
to Toru Takubo: I created a simple test code, and ran on linux-i386 and linux-arm. Test on linux-i386 is…

I did run test program on RaspberryPI: Linux+ARM and results are as expected.
(FPC 3.2.0)

-Laco.

Dňa 9.3.2021 o 1:47 Toru Takubo via fpc-pascal napísal(a):

Show quoted text 83 lines
On 2021/03/08 16:54, Michael Van Canneyt via fpc-pascal wrote: > > > On Mon, 8 Mar 2021, Toru Takubo via fpc-pascal wrote: > >> Hi, >> >> I am developing my app on Windows and building apps for other >> platforms by using cross compiler. Now I have a problem only >> occurred on Linux ARM. >> >> The problem is that it cannot write datetime field on sqlite3 >> database. It can read/write other fields like int, varchar >> or blob, but always write zero in datetime (maybe float as well) >> field. >> >> Does anyone have an idea about this issue? I am not sure it is >> fpc issue, but better to report bug? > > It sounds like a floating point problem. As you probably know, a > TDateTime > type is actually a double type. Did you try with a float value ? > > The DB explorer tools probably just use strings to read/write from the > database, so they will not be bothere by such things, but FPC stores > dataset > values in 'native' formats in memory. > > I don't know what to advise to further investigate the issue, One > thing to > try would be to test whether normal float arithmetic or date > arithmetic works. > If not, then the compiler people will need to give more advice. > I created a simple test code, and ran on linux-i386 and linux-arm. Test on linux-i386 is OK but on linux-arm, I got unexpected values "30-12-99" as datetime and "2.12199579096527E-314" as float, which are different from values previously set. (except INT and VARCHAR fields) ---linux-i386-------------------------------------------- INT, VARCHAR,           DATETIME,           DOUBLE 0, 9-3-21 08:50:23, 9-3-21 08:50:23, 0 1, 9-3-21 12:16:06, 9-3-21 12:16:06, 0.142857142857143 2, 9-3-21 15:41:49, 9-3-21 15:41:49, 0.285714285714286 3, 9-3-21 19:07:32, 9-3-21 19:07:32, 0.428571428571429 4, 9-3-21 22:33:15, 9-3-21 22:33:15, 0.571428571428571 5, 10-3-21 01:58:58, 10-3-21 01:58:58, 0.714285714285714 6, 10-3-21 05:24:40, 10-3-21 05:24:40, 0.857142857142857 7, 10-3-21 08:50:23, 10-3-21 08:50:23, 1 8, 10-3-21 12:16:06, 10-3-21 12:16:06, 1.14285714285714 9, 10-3-21 15:41:49, 10-3-21 15:41:49, 1.28571428571429 ---linux-arm--------------------------------------------- INT, VARCHAR,           DATETIME,           DOUBLE 0, 9-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 1, 9-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 2, 9-3-21 15:47:18, 30-12-99, 2.12199579096527E-314 3, 9-3-21 19:13:01, 30-12-99, 2.12199579096527E-314 4, 9-3-21 22:38:44, 30-12-99, 2.12199579096527E-314 5, 10-3-21 02:04:27, 30-12-99, 2.12199579096527E-314 6, 10-3-21 05:30:10, 30-12-99, 2.12199579096527E-314 7, 10-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 8, 10-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 9, 10-3-21 15:47:19, 30-12-99, 2.12199579096527E-314 I used a shared library libsqlite3.so included in the "DB Browser for SQLite", so it should work. What can cause such a problem only in the specific field on the specific platform? Thank you in advance for any advice. Toru _______________________________________________ fpc-pascal maillist - https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply by email

Toru Takubo
to LacaK
LacaK wrote 5 lines
I did run test program on RaspberryPI: Linux+ARM and results are as expected. (FPC 3.2.0) -Laco.

Thank you for your reproduction test. It may be a good news that the problem would not be in the compiler but around configuration or environment.

Do you have a native compiler on RaspberryPI, or using cross compiler? My compiler setting is below. Does something missing or wrong? -------------------------------------------
C:\lazarus\fpc\3.2.0\bin\i386-win32\fpc.exe
-Tlinux
-Parm
-MObjFPC
-Sh
-CX
-O3
-XX
-l
-vewnibq
-vh-
-vm5057,5028,5024,3042
-Fiobj\arm-linux
-Fu.
-FEobj\arm-linux
-oobj\arm-linux\project1
-------------------------------------------

If possible, would you publish your executive of the test program to try it?

Toru

Show quoted text 82 lines
Dňa 9.3.2021 o 1:47 Toru Takubo via fpc-pascal napísal(a): > On 2021/03/08 16:54, Michael Van Canneyt via fpc-pascal wrote: >> >> >> On Mon, 8 Mar 2021, Toru Takubo via fpc-pascal wrote: >> >>> Hi, >>> >>> I am developing my app on Windows and building apps for other >>> platforms by using cross compiler. Now I have a problem only >>> occurred on Linux ARM. >>> >>> The problem is that it cannot write datetime field on sqlite3 >>> database. It can read/write other fields like int, varchar >>> or blob, but always write zero in datetime (maybe float as well) >>> field. >>> >>> Does anyone have an idea about this issue? I am not sure it is >>> fpc issue, but better to report bug? >> >> It sounds like a floating point problem. As you probably know, a TDateTime >> type is actually a double type. Did you try with a float value ? >> >> The DB explorer tools probably just use strings to read/write from the >> database, so they will not be bothere by such things, but FPC stores dataset >> values in 'native' formats in memory. >> >> I don't know what to advise to further investigate the issue, One thing to >> try would be to test whether normal float arithmetic or date arithmetic works. >> If not, then the compiler people will need to give more advice. >> > > I created a simple test code, and ran on linux-i386 and linux-arm. > Test on linux-i386 is OK but on linux-arm, I got unexpected values > "30-12-99" as datetime and "2.12199579096527E-314" as float, which are different > from values previously set. (except INT and VARCHAR fields) > > ---linux-i386-------------------------------------------- > INT, VARCHAR,           DATETIME,           DOUBLE > 0, 9-3-21 08:50:23, 9-3-21 08:50:23, 0 > 1, 9-3-21 12:16:06, 9-3-21 12:16:06, 0.142857142857143 > 2, 9-3-21 15:41:49, 9-3-21 15:41:49, 0.285714285714286 > 3, 9-3-21 19:07:32, 9-3-21 19:07:32, 0.428571428571429 > 4, 9-3-21 22:33:15, 9-3-21 22:33:15, 0.571428571428571 > 5, 10-3-21 01:58:58, 10-3-21 01:58:58, 0.714285714285714 > 6, 10-3-21 05:24:40, 10-3-21 05:24:40, 0.857142857142857 > 7, 10-3-21 08:50:23, 10-3-21 08:50:23, 1 > 8, 10-3-21 12:16:06, 10-3-21 12:16:06, 1.14285714285714 > 9, 10-3-21 15:41:49, 10-3-21 15:41:49, 1.28571428571429 > > ---linux-arm--------------------------------------------- > INT, VARCHAR,           DATETIME,           DOUBLE > 0, 9-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 > 1, 9-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 > 2, 9-3-21 15:47:18, 30-12-99, 2.12199579096527E-314 > 3, 9-3-21 19:13:01, 30-12-99, 2.12199579096527E-314 > 4, 9-3-21 22:38:44, 30-12-99, 2.12199579096527E-314 > 5, 10-3-21 02:04:27, 30-12-99, 2.12199579096527E-314 > 6, 10-3-21 05:30:10, 30-12-99, 2.12199579096527E-314 > 7, 10-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 > 8, 10-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 > 9, 10-3-21 15:47:19, 30-12-99, 2.12199579096527E-314 > > I used a shared library libsqlite3.so included in the "DB Browser for SQLite", > so it should work. What can cause such a problem only in the specific field > on the specific platform? > > Thank you in advance for any advice. > > Toru > > > > > _______________________________________________ > fpc-pascal maillist > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal _______________________________________________ fpc-pascal maillist - https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply by email

Florian Klämpfl
to Toru Takubo: I created a simple test code, and ran on linux-i386 and linux-arm. Test on linux-i386 is…
Toru Takubo wrote 36 lines
On 2021/03/08 16:54, Michael Van Canneyt via fpc-pascal wrote: > > > On Mon, 8 Mar 2021, Toru Takubo via fpc-pascal wrote: > >> Hi, >> >> I am developing my app on Windows and building apps for other >> platforms by using cross compiler. Now I have a problem only >> occurred on Linux ARM. >> >> The problem is that it cannot write datetime field on sqlite3 >> database. It can read/write other fields like int, varchar >> or blob, but always write zero in datetime (maybe float as well) >> field. >> >> Does anyone have an idea about this issue? I am not sure it is >> fpc issue, but better to report bug? > > It sounds like a floating point problem. As you probably know, a > TDateTime > type is actually a double type. Did you try with a float value ? > > The DB explorer tools probably just use strings to read/write from the > database, so they will not be bothere by such things, but FPC stores > dataset > values in 'native' formats in memory. > > I don't know what to advise to further investigate the issue, One > thing to > try would be to test whether normal float arithmetic or date > arithmetic works. > If not, then the compiler people will need to give more advice. > I created a simple test code, and ran on linux-i386 and linux-arm.

Can you please post the output of -va of the arm compiler and provide some information about the arm system you are using?

Reply by email

Toru Takubo
to Florian Klämpfl
Florian Klämpfl wrote 35 lines
Am 09.03.21 um 01:47 schrieb Toru Takubo via fpc-pascal: > On 2021/03/08 16:54, Michael Van Canneyt via fpc-pascal wrote: >> >> >> On Mon, 8 Mar 2021, Toru Takubo via fpc-pascal wrote: >> >>> Hi, >>> >>> I am developing my app on Windows and building apps for other >>> platforms by using cross compiler. Now I have a problem only >>> occurred on Linux ARM. >>> >>> The problem is that it cannot write datetime field on sqlite3 >>> database. It can read/write other fields like int, varchar >>> or blob, but always write zero in datetime (maybe float as well) >>> field. >>> >>> Does anyone have an idea about this issue? I am not sure it is >>> fpc issue, but better to report bug? >> >> It sounds like a floating point problem. As you probably know, a TDateTime >> type is actually a double type. Did you try with a float value ? >> >> The DB explorer tools probably just use strings to read/write from the >> database, so they will not be bothere by such things, but FPC stores dataset >> values in 'native' formats in memory. >> >> I don't know what to advise to further investigate the issue, One thing to >> try would be to test whether normal float arithmetic or date arithmetic works. >> If not, then the compiler people will need to give more advice. >> > > I created a simple test code, and ran on linux-i386 and linux-arm. Can you please post the output of -va of the arm compiler and provide some information about the arm system you are using?

The output message with -va option can be downloaded from below.

http://support.e-parcel.ne.jp/downloads/tmp/fpc-va.txt

Target machine is Raspberry Pi OS on Raspberry Pi 3 Model B V1.2.

# uname -a
Linux raspberrypi 5.4.51-v7+ #1327 SMP Thu Jul 23 10:58:46 BST 2020 armv7l GNU/Linux

Best Regards,

Toru

Reply by email

LacaK
to Toru Takubo: Thank you for your reproduction test. It may be a good news that the problem would not be…

Dňa 9.3.2021 o 15:34 Toru Takubo via fpc-pascal napísal(a):

Show quoted text 12 lines
On 2021/03/09 18:11, LacaK via fpc-pascal wrote: > I did run test program on RaspberryPI: Linux+ARM and results are as > expected. > (FPC 3.2.0) > > -Laco. > Thank you for your reproduction test. It may be a good news that the problem would not be in the compiler but around configuration or environment. Do you have a native compiler on RaspberryPI, or using cross compiler?

I am using cross compiler. (build by FpcUpDeluxe)

My compiler setting is below. Does something missing or wrong?

My settings are:

-Tlinux
-Parm
-MObjFPC
-Scghi
-O1
-g
-gl
-l
-vewnhibq
-Filib\arm-linux
-Fu.
-FUlib\arm-linux
-FE.
-oproject1

Show quoted text 22 lines
------------------------------------------- C:\lazarus\fpc\3.2.0\bin\i386-win32\fpc.exe -Tlinux -Parm -MObjFPC -Sh -CX -O3 -XX -l -vewnibq -vh- -vm5057,5028,5024,3042 -Fiobj\arm-linux -Fu. -FEobj\arm-linux -oobj\arm-linux\project1 ------------------------------------------- If possible, would you publish your executive of the test program to try it?

Uploaded to
http://moja.uschovna.zoznam.sk/link/af6c3620-b919-4d64-9ab4-978af3d84717

-Laco.

Reply by email

Florian Klämpfl
to Toru Takubo: The output message with -va option can be downloaded from below.…
Show quoted text 7 lines
Am 10.03.2021 um 04:59 schrieb Toru Takubo via fpc-pascal : > Can you please post the output of -va of the arm compiler and provide some information about the arm system you are using? The output message with -va option can be downloaded from below. http://support.e-parcel.ne.jp/downloads/tmp/fpc-va.txt

[0.016] (3101) Macro defined: CPUARMV4
[0.016] (3101) Macro defined: FPUFPA
I am not sure how this happened but you are compiling for an ancient arm architecture, this is not going to work. FPA uses a different floating point format so this explains the problems.

Show quoted text 16 lines
Target machine is Raspberry Pi OS on Raspberry Pi 3 Model B V1.2. # uname -a Linux raspberrypi 5.4.51-v7+ #1327 SMP Thu Jul 23 10:58:46 BST 2020 armv7l GNU/Linux Best Regards, Toru _______________________________________________ fpc-pascal maillist - https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply by email

Toru Takubo
to LacaK: Dňa 9.3.2021 o 15:34 Toru Takubo via fpc-pascal napísal(a): I am using cross compiler.…
LacaK wrote 26 lines
Dňa 9.3.2021 o 15:34 Toru Takubo via fpc-pascal napísal(a): > On 2021/03/09 18:11, LacaK via fpc-pascal wrote: >> I did run test program on RaspberryPI: Linux+ARM and results are as expected. >> (FPC 3.2.0) >> >> -Laco. >> > My compiler setting is below. Does something missing or wrong? My settings are: -Tlinux -Parm -MObjFPC -Scghi -O1 -g -gl -l -vewnhibq -Filib\arm-linux -Fu. -FUlib\arm-linux -FE. -oproject1

Thank you for your information. Unfortunately, I tried this setting in vain.

Show quoted text 24 lines
> ------------------------------------------- > C:\lazarus\fpc\3.2.0\bin\i386-win32\fpc.exe > -Tlinux > -Parm > -MObjFPC > -Sh > -CX > -O3 > -XX > -l > -vewnibq > -vh- > -vm5057,5028,5024,3042 > -Fiobj\arm-linux > -Fu. > -FEobj\arm-linux > -oobj\arm-linux\project1 > ------------------------------------------- > > If possible, would you publish your executive of the test program to try it? > Uploaded to http://moja.uschovna.zoznam.sk/link/af6c3620-b919-4d64-9ab4-978af3d84717

It also worked on my target machine, which proved the target environment innocent. I appreciate your cooperation.

Toru

Reply by email

Toru Takubo
to Florian Klämpfl: [0.016] (3101) Macro defined: CPUARMV4 [0.016] (3101) Macro defined: FPUFPA I am not sure…
Florian Klämpfl wrote 13 lines
> Am 10.03.2021 um 04:59 schrieb Toru Takubo via fpc-pascal : > >> Can you please post the output of -va of the arm compiler and provide some information about the arm system you are using? > > The output message with -va option can be downloaded from below. > > http://support.e-parcel.ne.jp/downloads/tmp/fpc-va.txt [0.016] (3101) Macro defined: CPUARMV4 [0.016] (3101) Macro defined: FPUFPA I am not sure how this happened but you are compiling for an ancient arm architecture, this is not going to work. FPA uses a different floating point format so this explains the problems.

I understand it's my fault. I will dig into my development settings. Thank you and all list members for help and advice.

Toru

Reply by email