Skip to content

TSQLite3ResultRow

Ivan Semenkov edited this page Oct 24, 2021 · 2 revisions

Table of contents

About

TSQLite3ResultRow class encapsulates the SQLite3 result concrete row.

uses
  sqlite3.result_row;
  
type
  TSQLite3ResultRow = class

Create

A new database result row can be created by call its constructor.

constructor Create (AErrorsStack : PSQL3LiteErrorsStack; AStatementHandle :
  psqlite3_stmt);
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

ColumnCount

Return the number of columns in the result set.

function ColumnCount : Integer;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    writeln(row.ColumnCount);
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

ColumnName

Return the name assigned to a particular column in the result set.

function ColumnName (AIndex : Integer) : String;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    writeln(row.ColumnName(0));
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

GetColumnType

Returns the datatype for the initial data type of the result column.

function GetColumnType (AIndex : Integer) : TDataType;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    if row.GetColumnType(0) = SQLITE_INTEGER then
      ;
      
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

TDataType

Fundamental database column data types.

TDataType = (
  SQLITE_INTEGER,
  SQLITE_FLOAT,
  SQLITE_BLOB,
  SQLITE_NULL,
  SQLITE_TEXT
);

GetDoubleValue

Return double type value from column of the current result row of a query.

function GetDoubleValue (AColumnIndex : Integer) : Double;
function GetDoubleValue (AColumnName : String) : Double;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    writeln(row.GetDoubleValue(0));
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

GetIntegerValue

Return integer type value from column of the current result row of a query.

function GetIntegerValue (AColumnIndex : Integer) : Integer;
function GetIntegerValue (AColumnName : String) : Integer;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    writeln(row.GetIntegerValue(0));
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

GetInt64Value

Return int64 type value from column of the current result row of a query.

function GetInt64Value (AColumnIndex : Integer) : Int64;
function GetInt64Value (AColumnName : String) : Int64;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    writeln(row.GetInt64Value(0));
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

GetStringValue

Return string type value from column of the current result row of a query.

function GetStringValue (AColumnIndex : Integer) : String;
function GetStringValue (AColumnName : String) : String;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    writeln(row.GetStringValue(0));
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

GetIBlobValue

Return binary blob type value from column of the current result row of a query.

function GetBlobValue (AColumnIndex : Integer) : TBlobBuffer;
function GetBlobValue (AColumnName : String) : TBlobBuffer;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    row.GetBlobValue(0);
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

TBlobBuffer

Binary blob data wrapper.

uses
  sqlite3.result_row;
  
type
  TSQLite3ResultRow = class
  type
    TBlobBuffer = class
  end;
GetBufferDataSize

Returns the length of the valid data in the buffer.

function GetBufferDataSize : Int64;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    writeln(row.GetBlobValue(0).GetBufferDataSize);
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;
GetBufferData

Return a pointer to the data in the buffer.

function GetBufferData : Pointer;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    row.GetBlobValue(0).GetBufferData;
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;
GetBufferByte

Return concrete data byte.

function GetBufferByte (AOffset : Int64) : Byte;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    writeln(row.GetBlobValue(0).GetBufferByte(0));
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;
GetBufferBytesRange

Return buffer bytes range.

function GetBufferBytesRange (AOffset : Int64; ASize : Int64) : 
  TByteArray;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    row.GetBlobValue(0).GetBufferByteRange(0, 255);
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;
IsEmpty

Returns true if the buffer contains no data.

function IsEmpty : Boolean;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    if row.GetBlobValue(0).IsEmpty then
      ;
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;

IsNull

Check if column values is null.

function IsNull (AColumnIndex : Integer) : Boolean;
function IsNull (AColumnName : String) : Boolean;
Example
uses
  libpassqlite, sqlite3.errors_stack, utils.api.cstring, sqlite3.connection,
  sqlite3.result_row;
  
var
  errors : TSQLite3ErrorsStack;
  handle : psqlite3;
  statementHandle : psqlite3_stmt;
  query : API.PAnsiStringWrapper;
  connection : TSQLite3DatabaseConnection;
  row : TSQLite3Result;
  
begin
  errors := TSQLite3ErrorsStack.Create;
  connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
    [SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
  
  query := API.CString.Create('SELECT * FROM sqlite_master;').ToUniquePAnsiChar;
  if sqlite3_prepare_v3(handle, query.Value, query.Length,
    SQLITE_PREPARE_NORMALIZE, @statementHandle, nil) <> SQLITE_OK then
    { Oops! Something wrong. }
  
  { Run sql query and get row. }
  while sqlite3_step(statementHandle) = SQLITE_ROW do
  begin
    row := TSQLite3ResultRow.Create(@errors, statementHandle);
    if row.IsNull(0) then
      ;
    
    row := row.NextRow;
  end;
  
  FreeAndNil(res);
  FreeAndNil(query);
  FreeAndNil(connection);
  FreeAndNil(errors);
end;