-
Notifications
You must be signed in to change notification settings - Fork 10
murphy db
Murphy DB components
- MQI_BIT ::
- #define MQI_BIT (((mqi_bitfld_t)1) << (b))
- MQI_COLUMN_AUTOINCR ::
- #define MQI_COLUMN_AUTOINCR (1UL << 1)
- MQI_COLUMN_KEY ::
- #define MQI_COLUMN_KEY (1UL << 0)
- MQI_COLUMN_MAX ::
- #define MQI_COLUMN_MAX ((int)(sizeof(mqi_bitfld_t) * 8))
- MQI_COND_MAX ::
- #define MQI_COND_MAX 64
- MQI_DIMENSION ::
- #define MQI_DIMENSION (sizeof(array) / sizeof(array[0]))
- MQI_HANDLE_INVALID ::
- #define MQI_HANDLE_INVALID (~((mqi_handle_t)0))
- MQI_OFFSET ::
- #define MQI_OFFSET ((int)((void *)((&((structure *)0)->member)) - (void *)0))
- MQI_QUERY_RESULT_MAX ::
- #define MQI_QUERY_RESULT_MAX 8192
- MQI_TXDEPTH_MAX ::
- #define MQI_TXDEPTH_MAX 16
- MQL_BINDABLE ::
- #define MQL_BINDABLE (1 << (MQL_BIND_INDEX_BITS + 0))
- MQL_BIND_INDEX ::
- #define MQL_BIND_INDEX ((v) & MQL_BIND_INDEX_MASK)
- MQL_BIND_INDEX_BITS ::
- #define MQL_BIND_INDEX_BITS 8
- MQL_BIND_INDEX_MASK ::
- #define MQL_BIND_INDEX_MASK (MQL_BIND_INDEX_MAX - 1)
- MQL_BIND_INDEX_MAX ::
- #define MQL_BIND_INDEX_MAX (1 << MQL_BIND_INDEX_BITS)
- MQL_PARAMETER_MAX ::
- #define MQL_PARAMETER_MAX 16
int mql_exec_file(const char *file)
mql_exec_file() execute a series of MQL statements stored in a file
file is the path of the file, eg. "~/mql/create_table.mql"
This function is to execute a series of MQL statements stored in a file. The MQL statements supposed to separated with ';'. No ';' shall follow the last statement. In case of an error the the execution of the statements will stop, errno is set and the function will return -1. Error messages will be written to stderr. Currently there is no programmatic way to figure out what statement failed and how many statement were sucessfully executed.
mql_result_t* mql_exec_string(mql_result_type_t result_type, const char *statement)
mql_exec_string() execute an MQL statement
result_type specifies the expected type of the returned result. However, if the execution failed for some reason the returned result will have mql_result_error type.
statement is the string of the MQL statement to execute
This function is to execute a single MQL statement. The result of the operation is returned in a data structure. The returned result can be either the type of the requested result or an error result. It is recommended that the returned result will be checked first by calling mql_result_is_success() function.
To process a result the relevant mql_result_xxx() functions are to use. Values returned by the mql_result_xxx() functions are valid till the next MQL commit or rollback. For instance accessing the returned strings after a commit might lead to segfaults.
The returned result should be freed by mql_result_free().
mql_statement_t* mql_precompile(const char *statement)
mql_precompile() precompile an MQL statement
statement is the string of the MQL statement to execute
Precompilation is the parsing of the ASCII MQL statement, making all the necessary lookups, generating the data structures what the the underlying MQI interface needs for the execution and packing all these information into a dynamically allocated memory block.
mql_bind_value() can be used to assign values for parameters of the preecompiled statement, if any.
A precompiled statement can be executed by mql_exec_statement().
Precompiled statements should be freed by mql_statement_free() when they are not needed any more.
whitespace = 1*(SP / HTAB / CRLF)
SHOW = "SHOW"
BEGIN = "BEGIN"
COMMIT = "COMMIT"
ROLLBACK = "ROLLBACK"
TRANSACTION = "TRANSACTION"
TRANSACTIONS = "TRANSACTIONS"
CREATE = "CREATE"
UPDATE = "UPDATE"
REPLACE = "REPLACE"
DELETE = "DELETE"
DROP = "DROP"
DESCRIBE = "DESCRIBE"
TABLE = "TABLE"
TABLES = "TABLES"
INDEX = "INDEX"
ROWS = "ROWS"
COLUMN = "COLUMN"
TRIGGER = "TRIGGER"
INSERT = "INSERT"
SELECT = "SELECT"
INTO = "INTO"
FROM = "FROM"
WHERE = "WHERE"
VALUES = "VALUES"
SET = "SET"
ON = "ON"
IN = "IN"
OR = "OR"
PERSISTENT = "PERSISTENT"
TEMPORARY = "TEMPORARY"
CALLBACK = "CALLBACK"
VARCHAR = "VARCHAR"
INTEGER = "INTEGER"
UNSIGNED = "UNSIGNED"
REAL = "REAL"
BLOB = "BLOB"
parameter = "%" ("s" / "d" / "u" / "f")
not_squote = ALPHA / DIGIT / %x20-26 / %x28-2f / %x3a /
%x3c-40 / %x5b-60 / %x7b-7e
not_dquote = ALPHA / DIGIT / %x20-21 / %x23-2f / %x3a /
%x3c-40 / %x5b-60 / %x7b-7e
number = 1*DIGIT
floating = DIGIT "." *DIGIT
identifier = ALPHA *(*(ALPHA / DIGIT / "_" / "-") (ALPHA /
DIGIT))
quoted_string = ("'" *NOT_SQUOTE "'") / (DQUOTE *NOT_DQUOTE
DQUOTE)
statement_list = statement *(";" statement)
statement = show_statement / create_statement /
drop_statement / begin_statement /
commit_statement / rollback_statement /
describe_statement / insert_statement /
update_statement / delete_statement /
select_statement / error
show_statement = SHOW [PERSISTENT / TEMPORARY] TABLES
create_statement = create_table_statement / create_index_statement
/ create_trigger_statement
create_table_statement = CREATE [PERSISTENT / TEMPORARY] TABLE identifier
"(" column_defs ")"
create_index_statement = CREATE INDEX ON identifier "(" column_list ")"
create_trigger_statement = create_transaction_trigger /
create_table_trigger / create_row_trigger /
create_column_trigger
column_defs = column_def *("," column_def)
column_def = identifier column_type
column_type = VARCHAR "(" number ")" / INTEGER / UNSIGNED /
floating / BLOB "(" number ")"
create_transaction_trigger = CREATE TRIGGER identifier ON TRANSACTIONS
CALLBACK identifier
create_table_trigger = CREATE TRIGGER identifier ON TABLES CALLBACK
identifier
create_row_trigger = CREATE TRIGGER identifier ON ROWS IN identifier
CALLBACK identifier SELECT ("*" / column_list)
create_column_trigger = CREATE TRIGGER identifier ON COLUMN identifier
IN identifier CALLBACK identifier [SELECT ("*" /
column_list)]
drop_statement = drop_table_statement / drop_index_statement
drop_table_statement = DROP TABLE identifier
drop_index_statement = DROP INDEX identifier
begin_statement = BEGIN [TRANSACTION] identifier
commit_statement = COMMIT [TRANSACTION] identifier
rollback_statement = ROLLBACK [TRANSACTION] identifier
describe_statement = DESCRIBE identifier
insert_statement = (INSERT [OR REPLACE] INTO / REPLACE INTO)
identifier ["(" column_list ")"] VALUES "("
input_value_list ")"
input_value_list = input_value *("," input_value)
update_statement = UPDATE identifier SET assignment_list [WHERE
conditional_expression]
assignment_list = assignment *("," assignment)
assignment = identifier "=" input_value
delete_statement = DELETE FROM identifier [WHERE
conditional_expression]
select_statement = SELECT ("*" / column_list) FROM identifier
[WHERE conditional_expression]
column_list = identifier *("," identifier)
input_value = quoted_string / ("+" / "-") number / number /
(floating / ("+" / "-") floating) / parameter
conditional_expression = relational_expression / relational_expression
("&" / "|") relational_expression
relational_expression = value ("<" / "<=" / "=" / ">=" / ">") value
value = identifier / quoted_string / ("+" / "-") number
/ number / floating_value / parameter / "("
conditional_expression ")" / "!" value