package AdaBase.Results.Sets is type Datarow is tagged private; Empty_Datarow : constant Datarow; end AdaBase.Results.Sets;
AdaBase.Results.Sets.Datarow function
AdaBase.Statement.Base.[STMT].fetch_next ()
This function attempts to fetch the next row of data from a query's result set. If there is not another row of data available, the Empty_Datarow constant is returned, and the row's data_exhausted method returns False. If more data are available, the function returns a populated Datarow while the client library advances the cursor.
with AdaBase;
with Connect;
with CommonText;
with Ada.Text_IO;
with AdaBase.Results.Sets;
procedure DS_Fetch is
package CON renames Connect;
package TIO renames Ada.Text_IO;
package ARS renames AdaBase.Results.Sets;
package CT renames CommonText;
begin
CON.DR.set_trait_character_set (""); -- Native charset (Latin1), not UTF-8
CON.connect_database;
declare
sql : constant String := "SELECT * FROM fruits WHERE color = 'orange'";
stmt : CON.Stmt_Type := CON.DR.query (sql);
row : ARS.Datarow;
begin
TIO.Put_Line (" Query successful: " & stmt.successful'Img);
TIO.Put_Line (" Data Discarded: " & stmt.data_discarded'Img);
TIO.Put_Line ("Number of columns:" & stmt.column_count'Img);
TIO.Put_Line (" Number of rows:" & stmt.rows_returned'Img);
TIO.Put_Line ("");
for c in Natural range 1 .. stmt.column_count loop
TIO.Put_Line ("Column" & c'Img & ":");
TIO.Put_Line (" TABLE: " & stmt.column_table (c));
TIO.Put_Line (" NAME: " & stmt.column_name (c));
TIO.Put_Line (" TYPE: " & stmt.column_native_type (c)'Img);
end loop;
TIO.Put_Line ("");
loop
row := stmt.fetch_next;
exit when row.data_exhausted;
TIO.Put (CT.zeropad (Natural (row.column (1).as_byte2), 2) & " ");
declare
fruit : String := row.column ("fruit").as_string;
frlen : Natural := fruit'Length;
rest : String (1 .. 12 - frlen) := (others => ' ');
begin
TIO.Put (rest & fruit);
end;
TIO.Put (" (" & row.column ("color").as_string & ") calories =");
TIO.Put_Line (row.column (4).as_byte2'Img);
end loop;
end;
CON.DR.disconnect;
end DS_Fetch;
Example code: testcases/ds_fetch/ds_fetch.adb
Query successful: TRUE
Data Discarded: FALSE
Number of columns: 4
Number of rows: 7
Column 1:
TABLE: fruits
NAME: id
TYPE: FT_BYTE4
Column 2:
TABLE: fruits
NAME: fruit
TYPE: FT_TEXTUAL
Column 3:
TABLE: fruits
NAME: color
TYPE: FT_TEXTUAL
Column 4:
TABLE: fruits
NAME: calories
TYPE: FT_NBYTE2
02 apricot (orange) calories = 30
07 clementine (orange) calories = 24
13 mango (orange) calories = 40
15 cantaloupe (orange) calories = 25
16 nectarine (orange) calories = 25
18 orange (orange) calories = 65
27 tangerine (orange) calories = 26
Output using the MySQL driver
Query successful: TRUE
Data Discarded: FALSE
Number of columns: 4
Number of rows: 0
Column 1:
TABLE: fruits
NAME: id
TYPE: FT_BYTE8
Column 2:
TABLE: fruits
NAME: fruit
TYPE: FT_UTF8
Column 3:
TABLE: fruits
NAME: color
TYPE: FT_UTF8
Column 4:
TABLE: fruits
NAME: calories
TYPE: FT_BYTE8
02 apricot (orange) calories = 30
07 clementine (orange) calories = 24
13 mango (orange) calories = 40
15 cantaloupe (orange) calories = 25
16 nectarine (orange) calories = 25
18 orange (orange) calories = 65
27 tangerine (orange) calories = 26
Output using the SQLite driver
Query successful: TRUE
Data Discarded: FALSE
Number of columns: 4
Number of rows: 7
Column 1:
TABLE: fruits
NAME: id
TYPE: FT_BYTE4
Column 2:
TABLE: fruits
NAME: fruit
TYPE: FT_UTF8
Column 3:
TABLE: fruits
NAME: color
TYPE: FT_UTF8
Column 4:
TABLE: fruits
NAME: calories
TYPE: FT_BYTE4
02 apricot (orange) calories = 30
07 clementine (orange) calories = 24
13 mango (orange) calories = 40
15 cantaloupe (orange) calories = 25
16 nectarine (orange) calories = 25
18 orange (orange) calories = 65
27 tangerine (orange) calories = 26
Output using the PostgreSQL driver
[STMT] is "MySQL.MySQL_statement", "PostgreSQL.PostgreSQL_statement", or "SQLite.SQLite_statement"