1. Possible problem in EDS
- Posted by jessedavis Feb 01, 2018
- 1343 views
Version 4.0.5 Windows 10
1. Open database
2. Print out table names and sizes returned by db_table_size()
3. Delete a table
4. Print out table names and sizes returned by db_table_size()
The sizes returned in 4. are different from the sizes returned in 2.
If one closes the database after step 3 and immediately reopens it the sizes returned are correct.
Just a curiosity!
Regards,
jd
2. Re: Possible problem in EDS
- Posted by _tom (admin) Feb 01, 2018
- 1338 views
...
Just a curiosity!
Regards,
jd
This does not look good.
include std/eds.e include std/console.e include std/filesys.e display( "cleanup first" ) ? delete_file( current_dir() & "/" & "mydata.edb" ) display( "-- create a new database------ ") ? db_create( "mydata", DB_LOCK_NO) display( "---- add tables with records to database ----------" ) for i=1 to 5 do ? db_create_table( sprintf( "my_%d_table", i ) ) -- add some records for j=1 to rand(20) do ? db_insert( j, rand(100) ) end for end for sequence names = db_table_list() for i=1 to length(names) do printf(1, "%20s %d\n", {names[i], db_table_size( names[i] ) } ) end for display( "\n======== delete one table =============" ) db_delete_table( "my_3_table" ) names = db_table_list() for i=1 to length(names) do printf(1, "%20s %d\n", {names[i], db_table_size( names[i] ) } ) end for display( "\n--------- close and open the database" ) db_close() ? db_open( "mydata" ) names = db_table_list() for i=1 to length(names) do printf(1, "%20s %d\n", {names[i], db_table_size( names[i] ) } ) end for
Can not say way.
thanks
_tom
3. Re: Possible problem in EDS
- Posted by _tom (admin) Feb 01, 2018
- 1334 views
Tried to do this using Phix without luck:
? "cleanup first" {} = delete_file( current_dir() & "/" & "mydata.edb" ) ? "-- create a new database------ " {} = db_create( "mydata", DB_LOCK_NO) ? "---- add tables with records to database ----------" set_rand(1001) for i=1 to 5 do sequence tablename = sprintf( "my_%d_table", i ) -- ? tablename {} = db_create_table( tablename ) {} = db_select_table( tablename ) -- add some records integer rec_count = i + rand(20) ? rec_count for j=1 to rec_count do {} = db_insert( j, rand(50) ) end for end for sequence names = db_table_list() ? names for i=1 to length(names) do ? names[i] {} = db_select_table( names[i] ) ? db_table_size() end for /* "cleanup first" "-- create a new database------ " "---- add tables with records to database ----------" 3 4 14 12 8 {"my_1_table","my_2_table","my_3_table","my_4_table","my_5_table"} "my_1_table" 3 "my_2_table" 4 "my_3_table" Trace/breakpoint trap (core dumped) ------------------ (program exited with code: 133) Press return to continu */
_tom
4. Re: Possible problem in EDS
- Posted by petelomax Feb 03, 2018
- 1291 views
Tried to do this using Phix without luck:
There is a (linux-only) bug in builtins\VM\pfileioN.e around line 4130: when it calls sys_llseek it should save and restore edi like it does esi. Same deal for 64-bit around line 4285.
I have pushed that update to the repository, and the rebuilt files p32 and p64 to http://phix.x10.mx/download.php (so you need to run wget http://phix.x10.mx/p32 and mv p32 phix/p, ditto for 64 bit)
Pete
5. Re: Possible problem in EDS
- Posted by petelomax Feb 03, 2018
- 1280 views
Running this on Phix
?"cleanup first" {} = delete_file(current_dir() & "/" & "mydata.edb") ?"-- create a new database------ " if db_create("mydata", DB_LOCK_NO)!=DB_OK then ?9/0 end if ?"---- add tables with records to database ----------" for i=1 to 5 do if db_create_table(sprintf("my_%d_table", i))!=DB_OK then ?9/0 end if -- add some records for j=1 to rand(20) do if db_insert(j, rand(100))!=DB_OK then ?9/0 end if end for end for sequence names = db_table_list() for i=1 to length(names) do -- printf(1, "%20s %d\n", {names[i], db_table_size( names[i] ) } ) if db_select_table(names[i])!=DB_OK then ?9/0 end if printf(1, "%20s %d\n", {names[i], db_table_size()}) end for ?"======== delete one table =============" db_delete_table("my_3_table") names = db_table_list() for i=1 to length(names) do if db_select_table(names[i])!=DB_OK then ?9/0 end if printf(1, "%20s %d\n", {names[i], db_table_size()}) end for ?"--------- close and open the database" db_close() if db_open("mydata")!=DB_OK then ?9/0 end if names = db_table_list() for i=1 to length(names) do if db_select_table(names[i])!=DB_OK then ?9/0 end if printf(1, "%20s %d\n", {names[i], db_table_size()}) end for
now gives me
"cleanup first" "-- create a new database------ " "---- add tables with records to database ----------" my_1_table 15 my_2_table 7 my_3_table 19 my_4_table 14 my_5_table 17 "======== delete one table =============" my_1_table 15 my_2_table 7 my_4_table 14 my_5_table 17 "--------- close and open the database" my_1_table 15 my_2_table 7 my_4_table 14 my_5_table 17
which looks fine to me
Pete