dm_db_query Module

Basic SQL query builder.

Make sure to not add more than DB_QUERY_NPARAMS parameters to a query or increase the parameter first.


Uses

  • module~~dm_db_query~~UsesGraph module~dm_db_query dm_db_query module~dm_error dm_error module~dm_db_query->module~dm_error module~dm_kind dm_kind module~dm_db_query->module~dm_kind module~dm_error->module~dm_kind module~dm_ascii dm_ascii module~dm_error->module~dm_ascii iso_fortran_env iso_fortran_env module~dm_kind->iso_fortran_env

Used by

  • module~~dm_db_query~~UsedByGraph module~dm_db_query dm_db_query module~dm_db dm_db module~dm_db->module~dm_db_query module~dm_db_table dm_db_table module~dm_db_table->module~dm_db_query module~dm_db_table->module~dm_db module~dmpack dmpack module~dmpack->module~dm_db_query module~dmpack->module~dm_db module~dmpack->module~dm_db_table

Variables

Type Visibility Attributes Name Initial
integer, public, parameter :: DB_QUERY_TYPE_NONE = 0

No type (invalid).

integer, public, parameter :: DB_QUERY_TYPE_DOUBLE = 1

SQLite double precision.

integer, public, parameter :: DB_QUERY_TYPE_INT = 2

SQLite 32-bit integer.

integer, public, parameter :: DB_QUERY_TYPE_INT64 = 3

SQLite 64-bit integer.

integer, public, parameter :: DB_QUERY_TYPE_TEXT = 4

SQLite text.


Interfaces

public interface dm_db_query_update

Generic subroutine to add SET values to UPDATE query. The procedures do not validate that values have been added only once.

  • private pure subroutine db_query_update_double(db_query, column, value, error)

    Adds double precision SET parameter to query. Returns E_LIMIT in error if parameter limit has been reached.

    Arguments

    Type IntentOptional Attributes Name
    type(db_query_type), intent(inout) :: db_query

    Database query type.

    character(len=*), intent(in) :: column

    Column name.

    real(kind=r8), intent(in) :: value

    New column value.

    integer, intent(out), optional :: error

    Error code.

  • private pure subroutine db_query_update_int(db_query, column, value, error)

    Adds 32-bit integer SET parameter to query. Returns E_LIMIT if parameter limit has been reached.

    Arguments

    Type IntentOptional Attributes Name
    type(db_query_type), intent(inout) :: db_query

    Database query type.

    character(len=*), intent(in) :: column

    Column name.

    integer(kind=i4), intent(in) :: value

    New column value.

    integer, intent(out), optional :: error

    Error code.

  • private pure subroutine db_query_update_int64(db_query, column, value, error)

    Adds 64-bit integer SET parameter to query. Returns E_LIMIT if parameter limit has been reached.

    Arguments

    Type IntentOptional Attributes Name
    type(db_query_type), intent(inout) :: db_query

    Database query type.

    character(len=*), intent(in) :: column

    Column name.

    integer(kind=i8), intent(in) :: value

    New column value.

    integer, intent(out), optional :: error

    Error code.

  • private pure subroutine db_query_update_text(db_query, column, value, error)

    Adds text parameter to SET query. Returns E_LIMIT if parameter limit has been reached.

    Arguments

    Type IntentOptional Attributes Name
    type(db_query_type), intent(inout) :: db_query

    Database query type.

    character(len=*), intent(in) :: column

    Column name.

    character(len=*), intent(in) :: value

    New column value.

    integer, intent(out), optional :: error

    Error code.

public interface dm_db_query_where

Generic subroutine to add WHERE values to query. The procedures do not validate that values have been added only once.

  • private subroutine db_query_where_double(db_query, param, value, error)

    Adds double precision WHERE parameter to query. Returns E_LIMIT in error if parameter limit has been reached.

    Arguments

    Type IntentOptional Attributes Name
    type(db_query_type), intent(inout) :: db_query

    Database query type.

    character(len=*), intent(in) :: param

    Query parameter.

    real(kind=r8), intent(in) :: value

    Query parameter value.

    integer, intent(out), optional :: error

    Error code.

  • private subroutine db_query_where_int(db_query, param, value, error)

    Adds 32-bit integer WHERE parameter to query. Returns E_LIMIT if parameter limit has been reached.

    Arguments

    Type IntentOptional Attributes Name
    type(db_query_type), intent(inout) :: db_query

    Database query type.

    character(len=*), intent(in) :: param

    Query parameter.

    integer(kind=i4), intent(in) :: value

    Query parameter value.

    integer, intent(out), optional :: error

    Error code.

  • private subroutine db_query_where_int64(db_query, param, value, error)

    Adds 64-bit integer WHERE parameter to query. Returns E_LIMIT if parameter limit has been reached.

    Arguments

    Type IntentOptional Attributes Name
    type(db_query_type), intent(inout) :: db_query

    Database query type.

    character(len=*), intent(in) :: param

    Query parameter.

    integer(kind=i8), intent(in) :: value

    Query parameter value.

    integer, intent(out), optional :: error

    Error code.

  • private subroutine db_query_where_text(db_query, param, value, empty, error)

    Adds text parameter to WHERE query. Returns E_LIMIT if parameter limit has been reached. Empty strings and strings containing only white-space characters are ignored, unless argument empty is set to .true..

    Arguments

    Type IntentOptional Attributes Name
    type(db_query_type), intent(inout) :: db_query

    Database query type.

    character(len=*), intent(in) :: param

    Query parameter.

    character(len=*), intent(in) :: value

    Query parameter value.

    logical, intent(in), optional :: empty

    Add empty string.

    integer, intent(out), optional :: error

    Error code.


Derived Types

type, public ::  db_query_param_type

Single WHERE or SET parameter of database query.

Components

Type Visibility Attributes Name Initial
integer, public :: type = DB_QUERY_TYPE_NONE

Value type.

real(kind=r8), public :: value_double = 0.0_r8

Double value.

integer, public :: value_int = 0

Integer value.

integer(kind=i8), public :: value_int64 = 0.0_i8

64-bit integer value.

character(len=:), public, allocatable :: value_text

Text value.

character(len=:), public, allocatable :: sql

WHERE clause or column name.

type, public ::  db_query_type

Database query with SET values (for SQL UPDATE), WHERE parameters, LIMIT, and ORDER BY. Do not modify this derived type directly!

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: order_by

ORDER BY clause.

logical, public :: order_desc = .false.

ASC or DESC order.

integer(kind=i8), public :: limit = 0_i8

Row limit.

integer, public :: nparams = 0

Current WHERE parameter array size.

integer, public :: nupdates = 0

Current SET parameter array size.

type(db_query_param_type), public :: params(DB_QUERY_NPARAMS)

WHERE parameter array.

type(db_query_param_type), public :: updates(DB_QUERY_NPARAMS)

SET parameter array.


Functions

public function dm_db_query_build(db_query, base) result(sql)

Returns SQL string from query.

Arguments

Type IntentOptional Attributes Name
type(db_query_type), intent(inout) :: db_query

Database query type.

character(len=*), intent(in), optional :: base

Base query string.

Return Value character(len=:), allocatable

SQL string.


Subroutines

public pure elemental subroutine dm_db_query_destroy(db_query)

Resets query.

Arguments

Type IntentOptional Attributes Name
type(db_query_type), intent(inout) :: db_query

Database query type.

public pure elemental subroutine dm_db_query_set_limit(db_query, limit)

Sets LIMIT clause of query.

Arguments

Type IntentOptional Attributes Name
type(db_query_type), intent(inout) :: db_query

Database query type.

integer(kind=i8), intent(in), optional :: limit

Limit value.

public pure elemental subroutine dm_db_query_set_order(db_query, by, desc)

Sets ORDER BY clause of query.

Arguments

Type IntentOptional Attributes Name
type(db_query_type), intent(inout) :: db_query

Database query type.

character(len=*), intent(in) :: by

Field name.

logical, intent(in), optional :: desc

Descending order.