Database C API

Defines C APIs for interfacing with the database. More...

Functions

Detailed Description

Database C API provides low level interface to EOSIO database.

Functions Documentation

function db_store_i64

int32_t db_store_i64(
    uint64_t scope,
    capi_name table,
    capi_name payer,
    uint64_t id,
    const void * data,
    uint32_t len
)

Store a record in a primary 64-bit integer index table.

Parameters:

  • scope - The scope where the table resides (implied to be within the code of the current receiver)
  • table - The table name
  • payer - The account that pays for the storage costs
  • id - ID of the entry
  • data - Record to store
  • len - Size of data

Precondition:

data is a valid pointer to a range of memory at least len bytes long

Precondition:

*((uint64_t*)data) stores the primary key

Returns:

iterator to the newly created table row

Post

a new entry is created in the table

function db_update_i64

void db_update_i64(
    int32_t iterator,
    capi_name payer,
    const void * data,
    uint32_t len
)

Update a record in a primary 64-bit integer index table.

Parameters:

  • iterator - Iterator to the table row containing the record to update
  • payer - The account that pays for the storage costs (use 0 to continue using current payer)
  • data - New updated record
  • len - Size of data

Precondition:

data is a valid pointer to a range of memory at least len bytes long

Precondition:

*((uint64_t*)data) stores the primary key

Precondition:

iterator points to an existing table row in the table

Post

the record contained in the table row pointed to by iterator is replaced with the new updated record

Remark:

This function does not allow changing the primary key of a table row. The serialized data that is stored in the table row of a primary table may include a primary key and that primary key value could be changed by the contract calling the db_update_i64 intrinsic; but that does not change the actual primary key of the table row.

function db_remove_i64

void db_remove_i64(
    int32_t iterator
)

Remove a record from a primary 64-bit integer index table.

Parameters:

  • iterator - Iterator to the table row to remove

Precondition:

iterator points to an existing table row in the table

Post

the table row pointed to by iterator is removed and the associated storage costs are refunded to the payer

Example:

int32_t itr = db_find_i64(receiver, receiver, table1, "alice"_n);
eosio_assert(itr >= 0, "Alice cannot be removed since she was already not found in the table");
db_remove_i64(itr);

function db_get_i64

int32_t db_get_i64(
    int32_t iterator,
    const void * data,
    uint32_t len
)

Get a record in a primary 64-bit integer index table.

Parameters:

  • iterator - The iterator to the table row containing the record to retrieve
  • data - Pointer to the buffer which will be filled with the retrieved record
  • len - Size of the buffer

Returns:

size of the data copied into the buffer if len > 0, or size of the retrieved record if len == 0.

Precondition:

iterator points to an existing table row in the table

Precondition:

data is a valid pointer to a range of memory at least len bytes long

Post

data will be filled with the retrieved record (truncated to the first len bytes if necessary)

Example:

char value[50];
auto len = db_get_i64(itr, value, 0);
eosio_assert(len <= 50, "buffer to small to store retrieved record");
db_get_i64(itr, value, len);

function db_next_i64

int32_t db_next_i64(
    int32_t iterator,
    uint64_t * primary
)

Find the table row following the referenced table row in a primary 64-bit integer index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the next table row

Returns:

iterator to the table row following the referenced table row (or the end iterator of the table if the referenced table row is the last one in the table)

Precondition:

iterator points to an existing table row in the table

Post

*primary will be replaced with the primary key of the table row following the referenced table row if it exists, otherwise *primary will be left untouched

Example:

int32_t charlie_itr = db_find_i64(receiver, receiver, table1, "charlie"_n);
// expect nothing after charlie
uint64_t prim = 0
int32_t  end_itr = db_next_i64(charlie_itr, &prim);
eosio_assert(end_itr < -1, "Charlie was not the last entry in the table");

function db_previous_i64

int32_t db_previous_i64(
    int32_t iterator,
    uint64_t * primary
)

Find the table row preceding the referenced table row in a primary 64-bit integer index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the previous table row

Returns:

iterator to the table row preceding the referenced table row assuming one exists (it will return -1 if the referenced table row is the first one in the table)

Precondition:

iterator points to an existing table row in the table or it is the end iterator of the table

Post

*primary will be replaced with the primary key of the table row preceding the referenced table row if it exists, otherwise *primary will be left untouched

Example:

uint64_t prim = 0;
int32_t  itr_prev = db_previous_i64(itr, &prim);

function db_find_i64

int32_t db_find_i64(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint64_t id
)

Find a table row in a primary 64-bit integer index table by primary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • id - The primary key of the table row to look up

Returns:

iterator to the table row with a primary key equal to id or the end iterator of the table if the table row could not be found

Example:

int itr = db_find_i64(receiver, receiver, table1, "charlie"_n);

function db_lowerbound_i64

int32_t db_lowerbound_i64(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint64_t id
)

Find the table row in a primary 64-bit integer index table that matches the lowerbound condition for a given primary key.

The table row that matches the lowerbound condition is the first table row in the table with the lowest primary key that is >= the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • id - The primary key used to determine the lowerbound

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_upperbound_i64

int32_t db_upperbound_i64(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint64_t id
)

Find the table row in a primary 64-bit integer index table that matches the upperbound condition for a given primary key.

The table row that matches the upperbound condition is the first table row in the table with the lowest primary key that is > the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • id - The primary key used to determine the upperbound

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_end_i64

int32_t db_end_i64(
    capi_name code,
    uint64_t scope,
    capi_name table
)

Get an iterator representing just-past-the-end of the last table row of a primary 64-bit integer index table.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name

Returns:

end iterator of the table

function db_idx64_store

int32_t db_idx64_store(
    uint64_t scope,
    capi_name table,
    capi_name payer,
    uint64_t id,
    const uint64_t * secondary
)

Store an association of a 64-bit integer secondary key to a primary key in a secondary 64-bit integer index table.

Parameters:

  • scope - The scope where the table resides (implied to be within the code of the current receiver)
  • table - The table name
  • payer - The account that pays for the storage costs
  • id - The primary key to which to associate the secondary key
  • secondary - Pointer to the secondary key

Returns:

iterator to the newly created table row

Post

new secondary key association between primary key id and secondary key *secondary is created in the secondary 64-bit integer index table

function db_idx64_update

void db_idx64_update(
    int32_t iterator,
    capi_name payer,
    const uint64_t * secondary
)

Update an association for a 64-bit integer secondary key to a primary key in a secondary 64-bit integer index table.

Parameters:

  • iterator - The iterator to the table row containing the secondary key association to update
  • payer - The account that pays for the storage costs (use 0 to continue using current payer)
  • secondary - Pointer to the new secondary key that will replace the existing one of the association

Precondition:

iterator points to an existing table row in the table

Post

the secondary key of the table row pointed to by iterator is replaced by *secondary

function db_idx64_remove

void db_idx64_remove(
    int32_t iterator
)

Remove a table row from a secondary 64-bit integer index table.

Parameters:

  • iterator - Iterator to the table row to remove

Precondition:

iterator points to an existing table row in the table

Post

the table row pointed to by iterator is removed and the associated storage costs are refunded to the payer

function db_idx64_next

int32_t db_idx64_next(
    int32_t iterator,
    uint64_t * primary
)

Find the table row following the referenced table row in a secondary 64-bit integer index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the next table row

Returns:

iterator to the table row following the referenced table row (or the end iterator of the table if the referenced table row is the last one in the table)

Precondition:

iterator points to an existing table row in the table

Post

*primary will be replaced with the primary key of the table row following the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx64_previous

int32_t db_idx64_previous(
    int32_t iterator,
    uint64_t * primary
)

Find the table row preceding the referenced table row in a secondary 64-bit integer index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the previous table row

Returns:

iterator to the table row preceding the referenced table row assuming one exists (it will return -1 if the referenced table row is the first one in the table)

Precondition:

iterator points to an existing table row in the table or it is the end iterator of the table

Post

*primary will be replaced with the primary key of the table row preceding the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx64_find_primary

int32_t db_idx64_find_primary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint64_t * secondary,
    uint64_t primary
)

Find a table row in a secondary 64-bit integer index table by primary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to a uint64_t variable which will have its value set to the secondary key of the found table row
  • primary - The primary key of the table row to look up

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Returns:

iterator to the table row with a primary key equal to id or the end iterator of the table if the table row could not be found

function db_idx64_find_secondary

int32_t db_idx64_find_secondary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    const uint64_t * secondary,
    uint64_t * primary
)

Find a table row in a secondary 64-bit integer index table by secondary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key used to lookup the table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the first table row with a secondary key equal to *secondary or the end iterator of the table if the table row could not be found

function db_idx64_lowerbound

int32_t db_idx64_lowerbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint64_t * secondary,
    uint64_t * primary
)

Find the table row in a secondary 64-bit integer index table that matches the lowerbound condition for a given secondary key.

The table row that matches the lowerbound condition is the first table row in the table with the lowest secondary key that is >= the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key first used to determine the lowerbound and which is then replaced with the secondary key of the found table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx64_upperbound

int32_t db_idx64_upperbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint64_t * secondary,
    uint64_t * primary
)

Find the table row in a secondary 64-bit integer index table that matches the upperbound condition for a given secondary key.

The table row that matches the upperbound condition is the first table row in the table with the lowest secondary key that is > the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key first used to determine the upperbound and which is then replaced with the secondary key of the found table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx64_end

int32_t db_idx64_end(
    capi_name code,
    uint64_t scope,
    capi_name table
)

Get an end iterator representing just-past-the-end of the last table row of a secondary 64-bit integer index table.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name

Returns:

end iterator of the table

function db_idx128_store

int32_t db_idx128_store(
    uint64_t scope,
    capi_name table,
    capi_name payer,
    uint64_t id,
    const uint128_t * secondary
)

Store an association of a 128-bit integer secondary key to a primary key in a secondary 128-bit integer index table.

Parameters:

  • scope - The scope where the table resides (implied to be within the code of the current receiver)
  • table - The table name
  • payer - The account that pays for the storage costs
  • id - The primary key to which to associate the secondary key
  • secondary - Pointer to the secondary key

Returns:

iterator to the newly created table row

Post

new secondary key association between primary key id and secondary key *secondary is created in the secondary 128-bit integer index table

function db_idx128_update

void db_idx128_update(
    int32_t iterator,
    capi_name payer,
    const uint128_t * secondary
)

Update an association for a 128-bit integer secondary key to a primary key in a secondary 128-bit integer index table.

Parameters:

  • iterator - The iterator to the table row containing the secondary key association to update
  • payer - The account that pays for the storage costs (use 0 to continue using current payer)
  • secondary - Pointer to the new secondary key that will replace the existing one of the association

Precondition:

iterator points to an existing table row in the table

Post

the secondary key of the table row pointed to by iterator is replaced by *secondary

function db_idx128_remove

void db_idx128_remove(
    int32_t iterator
)

Remove a table row from a secondary 128-bit integer index table.

Parameters:

  • iterator - Iterator to the table row to remove

Precondition:

iterator points to an existing table row in the table

Post

the table row pointed to by iterator is removed and the associated storage costs are refunded to the payer

function db_idx128_next

int32_t db_idx128_next(
    int32_t iterator,
    uint64_t * primary
)

Find the table row following the referenced table row in a secondary 128-bit integer index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the next table row

Returns:

iterator to the table row following the referenced table row (or the end iterator of the table if the referenced table row is the last one in the table)

Precondition:

iterator points to an existing table row in the table

Post

*primary will be replaced with the primary key of the table row following the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx128_previous

int32_t db_idx128_previous(
    int32_t iterator,
    uint64_t * primary
)

Find the table row preceding the referenced table row in a secondary 128-bit integer index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the previous table row

Returns:

iterator to the table row preceding the referenced table row assuming one exists (it will return -1 if the referenced table row is the first one in the table)

Precondition:

iterator points to an existing table row in the table or it is the end iterator of the table

Post

*primary will be replaced with the primary key of the table row preceding the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx128_find_primary

int32_t db_idx128_find_primary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint128_t * secondary,
    uint64_t primary
)

Find a table row in a secondary 128-bit integer index table by primary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to a uint128_t variable which will have its value set to the secondary key of the found table row
  • primary - The primary key of the table row to look up

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Returns:

iterator to the table row with a primary key equal to id or the end iterator of the table if the table row could not be found

function db_idx128_find_secondary

int32_t db_idx128_find_secondary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    const uint128_t * secondary,
    uint64_t * primary
)

Find a table row in a secondary 128-bit integer index table by secondary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key used to lookup the table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the first table row with a secondary key equal to *secondary or the end iterator of the table if the table row could not be found

function db_idx128_lowerbound

int32_t db_idx128_lowerbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint128_t * secondary,
    uint64_t * primary
)

Find the table row in a secondary 128-bit integer index table that matches the lowerbound condition for a given secondary key.

The table row that matches the lowerbound condition is the first table row in the table with the lowest secondary key that is >= the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key first used to determine the lowerbound and which is then replaced with the secondary key of the found table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx128_upperbound

int32_t db_idx128_upperbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint128_t * secondary,
    uint64_t * primary
)

Find the table row in a secondary 128-bit integer index table that matches the upperbound condition for a given secondary key.

The table row that matches the upperbound condition is the first table row in the table with the lowest secondary key that is > the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key first used to determine the upperbound and which is then replaced with the secondary key of the found table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx128_end

int32_t db_idx128_end(
    capi_name code,
    uint64_t scope,
    capi_name table
)

Get an end iterator representing just-past-the-end of the last table row of a secondary 128-bit integer index table.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name

Returns:

end iterator of the table

function db_idx256_store

int32_t db_idx256_store(
    uint64_t scope,
    capi_name table,
    capi_name payer,
    uint64_t id,
    const uint128_t * data,
    uint32_t data_len
)

Store an association of a 256-bit secondary key to a primary key in a secondary 256-bit index table.

Parameters:

  • scope - The scope where the table resides (implied to be within the code of the current receiver)
  • table - The table name
  • payer - The account that pays for the storage costs
  • id - The primary key to which to associate the secondary key
  • data - Pointer to the secondary key data stored as an array of 2 uint128_t integers
  • data_len - Must be set to 2

Returns:

iterator to the newly created table row

Post

new secondary key association between primary key id and the specified secondary key is created in the secondary 256-bit index table

function db_idx256_update

void db_idx256_update(
    int32_t iterator,
    capi_name payer,
    const uint128_t * data,
    uint32_t data_len
)

Update an association for a 256-bit secondary key to a primary key in a secondary 256-bit index table.

Parameters:

  • iterator - The iterator to the table row containing the secondary key association to update
  • payer - The account that pays for the storage costs (use 0 to continue using current payer)
  • data - Pointer to the new secondary key data (which is stored as an array of 2 uint128_t integers) that will replace the existing one of the association
  • data_len - Must be set to 2

Precondition:

iterator points to an existing table row in the table

Post

the secondary key of the table row pointed to by iterator is replaced by the specified secondary key

function db_idx256_remove

void db_idx256_remove(
    int32_t iterator
)

Remove a table row from a secondary 256-bit index table.

Parameters:

  • iterator - Iterator to the table row to remove

Precondition:

iterator points to an existing table row in the table

Post

the table row pointed to by iterator is removed and the associated storage costs are refunded to the payer

function db_idx256_next

int32_t db_idx256_next(
    int32_t iterator,
    uint64_t * primary
)

Find the table row following the referenced table row in a secondary 256-bit index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the next table row

Returns:

iterator to the table row following the referenced table row (or the end iterator of the table if the referenced table row is the last one in the table)

Precondition:

iterator points to an existing table row in the table

Post

*primary will be replaced with the primary key of the table row following the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx256_previous

int32_t db_idx256_previous(
    int32_t iterator,
    uint64_t * primary
)

Find the table row preceding the referenced table row in a secondary 256-bit index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the previous table row

Returns:

iterator to the table row preceding the referenced table row assuming one exists (it will return -1 if the referenced table row is the first one in the table)

Precondition:

iterator points to an existing table row in the table or it is the end iterator of the table

Post

*primary will be replaced with the primary key of the table row preceding the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx256_find_primary

int32_t db_idx256_find_primary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint128_t * data,
    uint32_t data_len,
    uint64_t primary
)

Find a table row in a secondary 128-bit integer index table by primary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • data - Pointer to the an array of 2 uint128_t integers which will act as the buffer to hold the retrieved secondary key of the found table row
  • data_len - Must be set to 2
  • primary - The primary key of the table row to look up

Post

If and only if the table row is found, the buffer pointed to by data will be filled with the secondary key of the found table row

Returns:

iterator to the table row with a primary key equal to id or the end iterator of the table if the table row could not be found

function db_idx256_find_secondary

int32_t db_idx256_find_secondary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    const uint128_t * data,
    uint32_t data_len,
    uint64_t * primary
)

Find a table row in a secondary 256-bit index table by secondary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • data - Pointer to the secondary key data (which is stored as an array of 2 uint128_t integers) used to lookup the table row
  • data_len - Must be set to 2
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the first table row with a secondary key equal to the specified secondary key or the end iterator of the table if the table row could not be found

function db_idx256_lowerbound

int32_t db_idx256_lowerbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint128_t * data,
    uint32_t data_len,
    uint64_t * primary
)

Find the table row in a secondary 256-bit index table that matches the lowerbound condition for a given secondary key.

The table row that matches the lowerbound condition is the first table row in the table with the lowest secondary key that is >= the given key (uses lexicographical ordering on the 256-bit keys)

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • data - Pointer to the secondary key data (which is stored as an array of 2 uint128_t integers) first used to determine the lowerbound and which is then replaced with the secondary key of the found table row
  • data_len - Must be set to 2
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, the buffer pointed to by data will be filled with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx256_upperbound

int32_t db_idx256_upperbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    uint128_t * data,
    uint32_t data_len,
    uint64_t * primary
)

Find the table row in a secondary 256-bit index table that matches the upperbound condition for a given secondary key.

The table row that matches the upperbound condition is the first table row in the table with the lowest secondary key that is > the given key (uses lexicographical ordering on the 256-bit keys)

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • data - Pointer to the secondary key data (which is stored as an array of 2 uint128_t integers) first used to determine the upperbound and which is then replaced with the secondary key of the found table row
  • data_len - Must be set to 2
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, the buffer pointed to by data will be filled with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx256_end

int32_t db_idx256_end(
    capi_name code,
    uint64_t scope,
    capi_name table
)

Get an end iterator representing just-past-the-end of the last table row of a secondary 256-bit index table.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name

Returns:

end iterator of the table

function db_idx_double_store

int32_t db_idx_double_store(
    uint64_t scope,
    capi_name table,
    capi_name payer,
    uint64_t id,
    const double * secondary
)

Store an association of a double-precision floating-point secondary key to a primary key in a secondary double-precision floating-point index table.

Parameters:

  • scope - The scope where the table resides (implied to be within the code of the current receiver)
  • table - The table name
  • payer - The account that pays for the storage costs
  • id - The primary key to which to associate the secondary key
  • secondary - Pointer to the secondary key

Returns:

iterator to the newly created table row

Post

new secondary key association between primary key id and secondary key *secondary is created in the secondary double-precision floating-point index table

function db_idx_double_update

void db_idx_double_update(
    int32_t iterator,
    capi_name payer,
    const double * secondary
)

Update an association for a double-precision floating-point secondary key to a primary key in a secondary double-precision floating-point index table.

Parameters:

  • iterator - The iterator to the table row containing the secondary key association to update
  • payer - The account that pays for the storage costs (use 0 to continue using current payer)
  • secondary - Pointer to the new secondary key that will replace the existing one of the association

Precondition:

iterator points to an existing table row in the table

Post

the secondary key of the table row pointed to by iterator is replaced by *secondary

function db_idx_double_remove

void db_idx_double_remove(
    int32_t iterator
)

Remove a table row from a secondary double-precision floating-point index table.

Parameters:

  • iterator - Iterator to the table row to remove

Precondition:

iterator points to an existing table row in the table

Post

the table row pointed to by iterator is removed and the associated storage costs are refunded to the payer

function db_idx_double_next

int32_t db_idx_double_next(
    int32_t iterator,
    uint64_t * primary
)

Find the table row following the referenced table row in a secondary double-precision floating-point index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the next table row

Returns:

iterator to the table row following the referenced table row (or the end iterator of the table if the referenced table row is the last one in the table)

Precondition:

iterator points to an existing table row in the table

Post

*primary will be replaced with the primary key of the table row following the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx_double_previous

int32_t db_idx_double_previous(
    int32_t iterator,
    uint64_t * primary
)

Find the table row preceding the referenced table row in a secondary double-precision floating-point index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the previous table row

Returns:

iterator to the table row preceding the referenced table row assuming one exists (it will return -1 if the referenced table row is the first one in the table)

Precondition:

iterator points to an existing table row in the table or it is the end iterator of the table

Post

*primary will be replaced with the primary key of the table row preceding the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx_double_find_primary

int32_t db_idx_double_find_primary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    double * secondary,
    uint64_t primary
)

Find a table row in a secondary double-precision floating-point index table by primary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to a double variable which will have its value set to the secondary key of the found table row
  • primary - The primary key of the table row to look up

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Returns:

iterator to the table row with a primary key equal to id or the end iterator of the table if the table row could not be found

function db_idx_double_find_secondary

int32_t db_idx_double_find_secondary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    const double * secondary,
    uint64_t * primary
)

Find a table row in a secondary double-precision floating-point index table by secondary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key used to lookup the table row
  • primary - Pointer to a double variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the first table row with a secondary key equal to *secondary or the end iterator of the table if the table row could not be found

function db_idx_double_lowerbound

int32_t db_idx_double_lowerbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    double * secondary,
    uint64_t * primary
)

Find the table row in a secondary double-precision floating-point index table that matches the lowerbound condition for a given secondary key.

The table row that matches the lowerbound condition is the first table row in the table with the lowest secondary key that is >= the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key first used to determine the lowerbound and which is then replaced with the secondary key of the found table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx_double_upperbound

int32_t db_idx_double_upperbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    double * secondary,
    uint64_t * primary
)

Find the table row in a secondary double-precision floating-point index table that matches the upperbound condition for a given secondary key.

The table row that matches the upperbound condition is the first table row in the table with the lowest secondary key that is > the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key first used to determine the upperbound and which is then replaced with the secondary key of the found table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx_double_end

int32_t db_idx_double_end(
    capi_name code,
    uint64_t scope,
    capi_name table
)

Get an end iterator representing just-past-the-end of the last table row of a secondary double-precision floating-point index table.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name

Returns:

end iterator of the table

function db_idx_long_double_store

int32_t db_idx_long_double_store(
    uint64_t scope,
    capi_name table,
    capi_name payer,
    uint64_t id,
    const long double * secondary
)

Store an association of a quadruple-precision floating-point secondary key to a primary key in a secondary quadruple-precision floating-point index table.

Parameters:

  • scope - The scope where the table resides (implied to be within the code of the current receiver)
  • table - The table name
  • payer - The account that pays for the storage costs
  • id - The primary key to which to associate the secondary key
  • secondary - Pointer to the secondary key

Returns:

iterator to the newly created table row

Post

new secondary key association between primary key id and secondary key *secondary is created in the secondary quadruple-precision floating-point index table

function db_idx_long_double_update

void db_idx_long_double_update(
    int32_t iterator,
    capi_name payer,
    const long double * secondary
)

Update an association for a quadruple-precision floating-point secondary key to a primary key in a secondary quadruple-precision floating-point index table.

Parameters:

  • iterator - The iterator to the table row containing the secondary key association to update
  • payer - The account that pays for the storage costs (use 0 to continue using current payer)
  • secondary - Pointer to the new secondary key that will replace the existing one of the association

Precondition:

iterator points to an existing table row in the table

Post

the secondary key of the table row pointed to by iterator is replaced by *secondary

function db_idx_long_double_remove

void db_idx_long_double_remove(
    int32_t iterator
)

Remove a table row from a secondary quadruple-precision floating-point index table.

Parameters:

  • iterator - Iterator to the table row to remove

Precondition:

iterator points to an existing table row in the table

Post

the table row pointed to by iterator is removed and the associated storage costs are refunded to the payer

function db_idx_long_double_next

int32_t db_idx_long_double_next(
    int32_t iterator,
    uint64_t * primary
)

Find the table row following the referenced table row in a secondary quadruple-precision floating-point index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the next table row

Returns:

iterator to the table row following the referenced table row (or the end iterator of the table if the referenced table row is the last one in the table)

Precondition:

iterator points to an existing table row in the table

Post

*primary will be replaced with the primary key of the table row following the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx_long_double_previous

int32_t db_idx_long_double_previous(
    int32_t iterator,
    uint64_t * primary
)

Find the table row preceding the referenced table row in a secondary quadruple-precision floating-point index table.

Parameters:

  • iterator - The iterator to the referenced table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the previous table row

Returns:

iterator to the table row preceding the referenced table row assuming one exists (it will return -1 if the referenced table row is the first one in the table)

Precondition:

iterator points to an existing table row in the table or it is the end iterator of the table

Post

*primary will be replaced with the primary key of the table row preceding the referenced table row if it exists, otherwise *primary will be left untouched

function db_idx_long_double_find_primary

int32_t db_idx_long_double_find_primary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    long double * secondary,
    uint64_t primary
)

Find a table row in a secondary quadruple-precision floating-point index table by primary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to a long double variable which will have its value set to the secondary key of the found table row
  • primary - The primary key of the table row to look up

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Returns:

iterator to the table row with a primary key equal to id or the end iterator of the table if the table row could not be found

function db_idx_long_double_find_secondary

int32_t db_idx_long_double_find_secondary(
    capi_name code,
    uint64_t scope,
    capi_name table,
    const long double * secondary,
    uint64_t * primary
)

Find a table row in a secondary quadruple-precision floating-point index table by secondary key.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key used to lookup the table row
  • primary - Pointer to a long double variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the first table row with a secondary key equal to *secondary or the end iterator of the table if the table row could not be found

function db_idx_long_double_lowerbound

int32_t db_idx_long_double_lowerbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    long double * secondary,
    uint64_t * primary
)

Find the table row in a secondary quadruple-precision floating-point index table that matches the lowerbound condition for a given secondary key.

The table row that matches the lowerbound condition is the first table row in the table with the lowest secondary key that is >= the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key first used to determine the lowerbound and which is then replaced with the secondary key of the found table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx_long_double_upperbound

int32_t db_idx_long_double_upperbound(
    capi_name code,
    uint64_t scope,
    capi_name table,
    long double * secondary,
    uint64_t * primary
)

Find the table row in a secondary quadruple-precision floating-point index table that matches the upperbound condition for a given secondary key.

The table row that matches the upperbound condition is the first table row in the table with the lowest secondary key that is > the given key

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name
  • secondary - Pointer to secondary key first used to determine the upperbound and which is then replaced with the secondary key of the found table row
  • primary - Pointer to a uint64_t variable which will have its value set to the primary key of the found table row

Post

If and only if the table row is found, *secondary will be replaced with the secondary key of the found table row

Post

If and only if the table row is found, *primary will be replaced with the primary key of the found table row

Returns:

iterator to the found table row or the end iterator of the table if the table row could not be found

function db_idx_long_double_end

int32_t db_idx_long_double_end(
    capi_name code,
    uint64_t scope,
    capi_name table
)

Get an end iterator representing just-past-the-end of the last table row of a secondary quadruple-precision floating-point index table.

Parameters:

  • code - The name of the owner of the table
  • scope - The scope where the table resides
  • table - The table name

Returns:

end iterator of the table