📄 fastdbcli.cs
字号:
case (int)ErrorCode.cli_empty_query : return "Query SQL text is not assigned";
case (int)ErrorCode.cli_item_already_defined : return "Field/Variable is already defined";
case (int)ErrorCode.cli_wrong_inverse_reference : return "Wrong inverse reference";
case (int)ErrorCode.cli_no_fields_defined : return "No fields defined";
case (int)ErrorCode.cli_access_violation : return "Access Violation";
default: return String.Format("({0})", Code);
}
}
[Flags]
public enum CliOpenAttribute : int {
oaReadWrite = 0x00, //cli_open_default
oaReadOnly = 0x01, //cli_open_readonly
oaTruncate = 0x02, //cli_open_truncate
oaOpenConcurrent = 0x04 //cli_open_concurrent
};
/*=====================================================================
* cli_open
* Establish connection with the server
* Parameters:
* server_url - zero terminated string with server address and port,
* for example "localhost:5101", "195.239.208.240:6100",...
* max_connect_attempts - number of attempts to establish connection
* reconnect_timeout_sec - timeput in seconds between connection attempts
* Gigabase users:
* ===============
* user_name - user name for login
* password - password for login
* pooled_connection - if not 0, then connection will be allocated from the connection pool
*
* Returns:
* >= 0 - connectiondescriptor to be used in all other cli calls
* < 0 - error code as described in cli_result_code enum
*/
[DllImport(libname,
CharSet = CharSet.Ansi, // We want ANSI String
CallingConvention = CallingConvention.Cdecl)]
internal static extern int cli_open(
string ServerURL,
int MaxConnectAttempts,
int ReconnectTimeoutSec
#if GIGABASE
, string UserName
, string Password
, bool PooledConnection
#endif
);
/*=====================================================================
* cli_create
* Create connection to the local database
* Parameters:
* databaseName - name of the database
* fileName - path to the database file
* transactionCommitDelay - trasnaction commit delay (specify 0 to disable)
* openAttr - mask of cli_open_attributes
* initDatabaseSize - initial size of the database
* extensionQuantum - database extension quantum
* initIndexSize - initial size of object index
* fileSizeLimit - limit for file size (0 - unlimited)
* Returns:
* >= 0 - connection descriptor to be used in all other cli calls
* < 0 - error code as described in cli_result_code enum
*/
[DllImport(libname,
CharSet = CharSet.Ansi, // We want ANSI String
CallingConvention = CallingConvention.Cdecl)]
internal static extern int cli_create(
#if GIGABASE
uint TransactionCommitDelay: Word=0;
int openAttr;
int PoolSize
#else
string databaseName, //[MarshalAs(UnmanagedType.LPStr)] string databaseName,
string filePath, //[MarshalAs(UnmanagedType.LPStr)] string filePath,
uint transactionCommitDelay,
int openAttr,
int initDatabaseSize,
int extensionQuantum,
int initIndexSize,
int fileSizeLimit
#endif
);
/*=====================================================================
* cli_create_replication_node
* Create connection to the local database with support of replication
* Parameters:
* nodeId - node identifier: 0 <= nodeId < nServers
* nServers - number of replication nodes (primary + standby)
* nodeNames - array with URLs of the nodes (address:port)
* databaseName - name of the database
* fileName - path to the database file
* transactionCommitDelay - trasnaction commit delay (specify 0 to disable)
* openAttr - mask of cli_open_attributes (to allow concurrent read access to replication node,
* cli_open_concurrent attribute should be set)
* initDatabaseSize - initial size of the database
* extensionQuantum - database extension quantum
* initIndexSize - initial size of object index
* fileSizeLimit - limit for file size (0 - unlimited)
* Returns:
* >= 0 - connection descriptor to be used in all other cli calls
* < 0 - error code as described in cli_result_code enum
*/
[DllImport(libname,
CharSet = CharSet.Ansi, // We want ANSI String
CallingConvention = CallingConvention.Cdecl)]
internal static extern int cli_create_replication_node(
int nodeId,
int nServers,
[In, Out] String[] nodeNames,
string databaseName,
string filePath,
int openAttr,
int initDatabaseSize,
int extensionQuantum,
int initIndexSize,
int fileSizeLimit);
/*=====================================================================
* cli_close
* Close session
* Parameters:
* session - session descriptor returned by cli_open
* Returns:
* result code as described in cli_result_code enum
*/
[DllImport(libname,
CharSet = CharSet.Ansi, // We want ANSI String
CallingConvention = CallingConvention.Cdecl)]
internal static extern int cli_close(int session);
/*=====================================================================
* cli_statement
* Specify SubSQL statement to be executed at server
* Binding to the parameters and columns can be established
* Parameters:
* session - session descriptor returned by cli_open
* stmt - zero terminated string with SubSQL statement
* Returns:
* >= 0 - statement descriptor
* < 0 - error code as described in cli_result_code enum
*/
[DllImport(libname,
CharSet = CharSet.Ansi, // We want ANSI String
CallingConvention = CallingConvention.Cdecl)]
internal static extern int cli_statement(int session, string stmt);
/*=====================================================================
* cli_parameter
* Bind parameter to the statement
* Parameters:
* statement - statememt descriptor returned by cli_statement
* param_name - zero terminated string with parameter name
* Paramter name should start with '%'
* var_type - type of variable as described in CliVarType enum.
* Only scalar and zero terminated string types are supported.
* var_ptr - pointer to the variable
* Returns:
* result code as described in cli_result_code enum
*/
[DllImport(libname,
CharSet = CharSet.Ansi, // We want ANSI String
CallingConvention = CallingConvention.Cdecl)]
internal static extern int cli_parameter(
int statement,
string param_name,
int var_type,
IntPtr var_ptr);
/*=====================================================================
* cli_column
* Bind extracted column of select or insert statement
* Parameters:
* statement - statememt descriptor returned by cli_statement
* column_name - zero terminated string with column name
* var_type - type of variable as described in CliVarType enum
* var_len - pointer to the variable to hold length of array variable.
* This variable should be assigned the maximal length
* of the array/string buffer, pointed by var_ptr.
* After the execution of the statement it is assigned the
* real length of the fetched array/string. If it is large
* than length of the buffer, then only part of the array
* will be placed in the buffer, but var_len still will
* contain the actual array length.
* var_ptr - pointer to the variable
* Returns:
* result code as described in cli_result_code enum
*/
[DllImport(libname,
CharSet = CharSet.Ansi, // We want ANSI String
CallingConvention = CallingConvention.Cdecl)]
public static extern int cli_column(
int statement,
string column_name,
int var_type,
ref int var_len,
IntPtr var_data);
[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Ansi )]
public struct UnmanagedBuffer {
public int type;
public int capacity;
public int size;
public bool fetch_data;
public IntPtr data;
}
/* The C# does not allow you to specify the calling convention of the callback.
* It is just one of the C# limitations. IL, managed C++ and the runtime itself
* supports the cdecl calling convention for delegates through
* modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl) on the
* internal Invoke method of the delegate. Run ildasm on a small example in
* managed C++ if you want to know the exact syntax.
*/
internal unsafe delegate IntPtr CliColumnSetEx(
int var_type,
IntPtr var_ptr,
int len,
[MarshalAs(UnmanagedType.LPStr)]
string column_name,
int statement,
IntPtr source_ptr,
void* buffer);
internal unsafe delegate IntPtr CliColumnGetEx(
int var_type,
IntPtr var_ptr,
ref int len,
string column_name, int statement,
void* buffer);
/*=====================================================================
* cli_array_column
* Specify get/set functions for the array column
* Parameters:
* statement - statememt descriptor returned by cli_statement
* column_name - zero terminated string with column name
* var_type - type of variable as described in CliVarType enum
* var_ptr - pointer to the variable
* set - function which will be called to construct fetched
* field. It receives pointer to the variable,
* length of the fetched array and returns pointer to th
* array's elements
* get - function which will be called to update the field in the
* database. Given pointer to the variable, it should return
* pointer to the array elements and store length of the
* array to the variable pointer by len parameter
* Returns:
* result code as described in cli_result_code enum
*/
[DllImport(libname,
CharSet = CharSet.Ansi, // We want ANSI String
CallingConvention = CallingConvention.Cdecl)]
internal unsafe static extern int cli_array_column_ex(
int statement,
string column_name,
int var_type,
IntPtr var_ptr,
CliColumnSetEx SetCallback,
CliColumnGetEx GetCallback,
void* user_data);
public enum QueryType: int {
cli_view_only = 0,
cli_for_update = 1
}
/*=====================================================================
* cli_fetch
* Execute select statement.
* Parameters:
* statement - statememt descriptor returned by cli_statement
* queryType - not zero if fetched rows will be updated
* Returns:
* >= 0 - success, for select statements number of fetched rows is returned
* < 0 - error code as described in cli_result_code enum
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -