Ppeixianzhongupdate 1.0.0
4b030e58创建于 2025年8月19日历史提交

mysqlclient-ffi库

介绍

基于 libmysqlclient 实现 database 包。

CDBC接口

数据库驱动接口

介绍

数据库驱动

主要接口

public class MysqlDriver <: Driver
public class MysqlDriver <: Driver {
    /*
     * 初始化驱动
     *
     * 参数 name - 驱动名称
     * 异常 SqlException - 内存不足导致初始化失败
     */
    public init(name: String)

    /**
     * 驱动名称
     */
    public override prop name: String

    /**
     * 驱动版本
     *
     * 异常 SqlException - 获取版本失败
     */
    public override prop version: String

    /**
     * 指示驱动程序是否与连接池亲和。
     * 如果否,则不建议使用连接池。
     * 比如sqlite驱动连接池化的收益不明显,不建议使用连接池
     */
    public override prop preferredPooling: Bool

    /*
     * 通过connectionString和选项打开数据源
     *
     * 参数 connectionString - 数据库连接字符串
     * 参数 _ - key,value的tuple数组,打开数据源的选项
     * 返回值 Datasource - 数据源实例
     * 异常 SqlException - connectionString连接内容不正确会导致异常
     */
    public override func open(connectionString: String, _: Array<(String, String)>): MysqlDatasource
}

数据源接口

介绍

数据源

主要接口

public class MysqlDatasource <: Datasource
public class MysqlDatasource <: Datasource {
    /*
     * 设置连接选项(不支持)
     */
    public override func setOption(_: String, _: String): Unit

    /*
     * 连接前设置选项
     *
     * 参数 key - C中枚举 enum mysql_option
     * 参数 value - 值
     */
    public func setOption(key: MysqlOption, value: String): Unit

    /*
     * 连接前设置选项
     *
     * 参数 key - C中枚举 enum mysql_option
     * 参数 value - 值
     */
    public func setOption(key: MysqlOption, value: UInt32): Unit

    /*
     * 连接前设置选项
     *
     * 参数 key - C中枚举 enum mysql_option
     * 参数 value - 值
     */
    public func setOption(key: MysqlOption, value: UInt64): Unit

    /*
     * 连接前设置选项
     *
     * 参数 key - C中枚举 enum mysql_option
     * 参数 value - 值
     */
    public func setOption(key: MysqlOption, value: Bool): Unit

    /*
     * 返回一个可用的连接
     *
     * 返回值 Connection - 数据库连接实例
     * 异常 SqlException - 和mysql server连接失败会导致异常
     */
    public override func connect(): MysqlConnection

    /*
     * 关闭资源 (不支持)
     */
    public override func close(): Unit

    /*
     * 判断资源是否关闭(不支持)
     *
     * 返回值 Bool - 如果已经关闭返回true,否则返回false
     */
    public override func isClosed(): Bool
}

数据库连接接口

介绍

数据库连接

主要接口

public class MysqlConnection <: Connection
public class MysqlConnection <: Connection {    
    /*
     * connection标识ID
     */
    public prop objId: UInt64

    /**
     * 描述与数据源连接的当前状态
     */
    public override prop state: ConnectionState

    /**
     * 返回连接到的数据源元数据(不支持)
     *
     * 返回值 Map<String, String> - 数据源元数据
     */
    public override func getMetaData(): Map<String, String>

    /*
     * 设置连接选项
     *
     * 参数 option - C中枚举 enum enum_mysql_set_option
     * 异常 SqlException - 设置错误
     */
    public func setOption(option: MysqlSetOption): Unit

    /**
     * 通过传入的 sql 语句,返回一个预执行的 Statement 对象实例
     *
     * 参数 sql - 预执行的 sql 语句,sql 语句的参数只支持 ? 符号占位符
     * 返回值 Statement - 一个可以执行 sql 语句的实例对象
     * 异常 SqlException - 可能传入SQL语句错误
     */
    public override func prepareStatement(sql: String): MysqlStatement

    /**
     * 创建事务对象
     *
     * 返回值 MysqlTransaction - 事务对象
     */
    public override func createTransaction(): MysqlTransaction

    /*
     * 关闭资源
     */
    public override func close(): Unit

    /*
     * 判断资源是否关闭
     *
     * 返回值 Bool - 如果已经关闭返回true,否则返回false
     */
    public override func isClosed(): Bool

    /*
     * ping服务器,保持连接
     */
    public func mysqlPing(): Unit
}

sql语句预执行接口

介绍

sql语句预执行

主要接口

public class MysqlStatement <: Statement
public class MysqlStatement <: Statement {
    /*
     * 预执行 sql 语句中,占位参数的列信息(不支持)
     */
    public override prop parameterColumnInfos: Array<ColumnInfo>

    /*
     * 预执行sql语句中,占位的参数个数
     */
    public prop parameterCount: Int64

    /**
     * 设置预执行sql语句选项(不支持)
     */
    public override func setOption(_: String, _: String): Unit

    /**
     * 设置预执行sql语句选项
     *
     * 参数 option - C中枚举 enum enum_stmt_attr_type
     * 参数 arg - 值
     * 异常 SqlException - 参数设置错误。
     */
    public func setOption(option: MysqlStmtAttrType, arg: Bool): Unit

    /**
     * 设置预执行sql语句选项
     *
     * 参数 option - C中枚举 enum enum_stmt_attr_type
     * 参数 arg - 值
     * 异常 SqlException - 参数设置错误。
     */
    public func setOption(option: MysqlStmtAttrType, arg: UInt64): Unit

    /**
     * 设置预执行sql语句参数
     *
     * 参数 index - 位置
     * 参数 value - 值
     * 异常 Exception - 参数设置错误。
     */
    public override func set<T>(index: Int, value: T): Unit

    /**
     * 设置预执行sql语句null参数
     *
     * 参数 index - 位置
     * 异常 Exception - 参数设置错误。
     */
    public override func setNull(index: Int): Unit

    /**
     * 执行sql语句,得到更新结果
     *
     * 返回值 UpdateResult - 更新结果。
     * 异常 Exception - 传入参数错误。
     */
    public override func update(): MysqlUpdateResult

    /**
     * 执行sql语句,得到查询结果
     *
     * 返回值 QueryResult - 查询结果。
     * 异常 Exception - 传入参数错误。
     */
    public override func query(): MysqlQueryResult

    /**
     * 执行sql语句,得到更新结果 - todo:废弃
     *
     * 参数 params - 填充预执行语句中问号的数据。
     * 返回值 UpdateResult - 更新结果。
     * 异常 SqlException - 传入参数错误。
     */
    @Deprecated
    public override func update(params: Array<SqlDbType>): MysqlUpdateResult

    /**
     * 执行sql语句,得到查询结果 - todo:废弃
     *
     * 参数 params - 填充预执行语句中问号的数据。
     * 返回值 QueryResult - 查询结果。
     * 异常 SqlException - 传入参数错误。
     */
    @Deprecated
    public override func query(params: Array<SqlDbType>): MysqlQueryResult

    /*
     * 关闭资源
     *
     * 异常 SqlException - 关闭资源失败。
     */
    public override func close(): Unit

    /*
     * 判断资源是否关闭
     *
     * 返回值 Bool - 如果已经关闭返回true,否则返回false
     */
    public override func isClosed(): Bool
}

执行Insert、Update、Delete语句产生的结果接口

介绍

执行Insert、Update、Delete语句产生的结果

主要接口

public class MysqlUpdateResult <: UpdateResult
public class MysqlUpdateResult <: UpdateResult {
    /*
     * 执行Insert,Update,Delete语句影响的行数
     */
    public override prop rowCount: Int64

    /*
     * 执行Insert语句自动生成的最后rowID,如果不支持则为0
     */
    public override prop lastInsertId: Int64
}

执行Select语句产生的结果接口

介绍

执行Select语句产生的结果

主要接口

public class MysqlQueryResult <: QueryResult
public class MysqlQueryResult <: QueryResult {
    /*
     * 返回结果集的列信息,比如列名,列类型,列长度,是否允许数据库Null值等(不支持)
     */
    public override prop columnInfos: Array<ColumnInfo>

    /*
     * 返回结果集的列信息,比如列名,列类型,列长度,是否允许数据库Null值等
     */
    public prop mysqlColumnInfos: Array<MysqlColumnInfo>

    /*
     * 向后移动一行,必须先调用一次 next() 才能移动到第一行,第二次调用移动到第二行,依此类推。当返回 true 时,驱动会在结果集的当前行填入数据,当返回 false 时结束,且不会修改结果集当前行的内容。
     *
     * 返回值 Bool - 存在下一行则返回true,否则返回false
     * 异常 Exception - 传入参数错误
     */
    public override func next(): Bool

    /*
     * 获取可以为null的数据
     *
     * 参数 index - 位置
     * 返回值 ?T - 值
     * 异常 Exception - 传入参数错误
     */
    public override func getOrNull<T>(index: Int): ?T

    /*
     * 获取数据
     *
     * 参数 index - 位置
     * 返回值 T - 值
     * 异常 Exception - 传入参数错误
     */
    public override func get<T>(index: Int): T

    /*
     * 向后移动一行,必须先调用一次next才能移动到第一行,第二次调用移动到第二行,依此类推。
     * 当返回true时,驱动会在values中填入行数据;当返回false时结束,且不会修改values的内容。 - todo:废弃
     *
     * 参数 values - 需要填充返回的数据
     * 返回值 Bool - 存在下一行则返回true,否则返回false
     * 异常 SqlException - 传入参数错误
     */
    @Deprecated
    public override func next(values: Array<SqlDbType>): Bool

    /*
     * 关闭资源
     *
     * 异常 SqlException - 关闭资源失败。
     */
    public override func close(): Unit

    /*
     * 判断资源是否关闭
     * 返回值 Bool - 如果已经关闭返回true,否则返回false
     */
    public override func isClosed(): Bool
}

执行Select/Query语句返回结果的列信息接口

介绍

执行Select/Query语句返回结果的列信息

主要接口

public class MysqlColumnInfo <: ColumnInfo
public class MysqlColumnInfo <: ColumnInfo {
    /*
     * 初始化执行Select/Query语句返回结果的列信息
     *
     * 参数 name - 列名或者别名
     * 参数 typeName - 列类型名称
     * 参数 displaySize - 列值的最大显示长度
     * 参数 length - 获取列值大小
     * 参数 scale - 列值的小数长度
     * 参数 nullable - 列值是否允许数据库Null值
     */
    public init(name: String, typeName: String, displaySize: Int64, length: Int64, scale: Int64, nullable: Bool)

    /*
     * 列名或者别名
     */
    public override prop name: String

    /*
     * 列类型名称,如果在SqlDataType中定义
     * 返回SqlDataType.toString(),如果未在SqlDataType中定义,由数据库驱动定义
     */
    public override prop typeName: String

    /*
     * 列值的最大显示长度,如果无限制,则应该返回Int64.Max(仍然受数据库的限制)
     */
    public override prop displaySize: Int64

    /**
     * 获取列值大小。
     */
    public override prop length: Int64

    /*
     * 列值的小数长度,如果无小数部分,返回0
     */
    public override prop scale: Int64

    /*
     * 列值是否允许数据库Null值
     */
    public override prop nullable: Bool
}

定义数据库事务的核心行为接口

介绍

定义数据库事务的核心行为

主要接口

public class MysqlTransaction <: Transaction
public class MysqlTransaction <: Transaction {
    /*
     * 数据库事务隔离级别。
     * 没有提供直接获取数据库事务隔离级别的接口或属性。但是,可以通过执行 SQL 语句来查询事务隔离级别,
     *
     * 异常 SqlException - 数据库事务隔离级别获取设置失败。
     */
    public mut override prop isoLevel: TransactionIsoLevel

    /*
     * 数据库事务访问模式。
     * 没有提供直接获取数据库事务隔离级别的接口或属性。但是,可以通过执行 SQL 语句来查询事务隔离级别,
     * 返回一个值 0 或 1。如果值是 0,表示事务访问模式是读写模式;如果值是 1,表示事务访问模式是只读模式
     *
     * 异常 SqlException - 数据库事务访问模式获取设置失败。
     */
    public mut override prop accessMode: TransactionAccessMode

    /*
     * 数据库事务延迟模式。(不支持)
     * 仅PostgreSQL和PostgreSQL支持
     */
    public mut override prop deferrableMode: TransactionDeferrableMode

    /*
     * 开始数据库事务。
     *
     * 异常 SqlException - 开始数据库事务失败。
     */
    public override func begin(): Unit

    /*
     * 提交数据库事务。
     *
     * 异常 SqlException - 提交数据库事务失败。
     */
    public override func commit(): Unit

    /*
     * 从挂起状态回滚事务。
     *
     * 异常 SqlException - 从挂起状态回滚事务失败。
     */
    public override func rollback(): Unit

    /*
     * 在事务中创建一个指定名称的保存点,可用于回滚事务的一部分。
     *
     * 参数 savePointName - 保存点名称。
     * 异常 SqlException - 提交事务时服务器端发生错误或者事务已提交或回滚或连接已断开。
     */
    public override func save(savePointName: String): Unit

    /*
     * 回滚事务至指定保存点名称。
     *
     * 参数 savePointName - 保存点名称。
     * 异常 SqlException - 提交事务时服务器端发生错误或者事务已提交或回滚或连接已断开。
     */
    public override func rollback(savepointName: String): Unit

    /*
     * 销毁先前在当前事务中定义的保存点。这允许系统在事务结束之前回收一些资源。
     *
     * 参数 savePointName - 保存点名称。
     * 异常 SqlException - 提交事务时服务器端发生错误或者事务已提交或回滚或连接已断开。
     */
    public override func release(savePointName: String): Unit
}

新增数据结构接口

介绍

新增数据结构

主要接口

public class SqlDateTime <: SqlDbType
public class SqlDateTime <: SqlDbType {
    /*
     * 初始化SQL数据类型
     *
     * 参数 dateTime - 日期数据
     */
    public init(dateTime: DateTime)

    /*
     * 数据
     */
    public mut prop value: DateTime

    /*
     * 类型名称
     */
    public prop name: String
}
public class SqlNullableDateTime <: SqlNullableDbType
public class SqlNullableDateTime <: SqlNullableDbType{
    /*
     * 初始化SQL数据类型
     *
     * 参数 dateTime - 日期数据
     */
    public init(dateTime: ?DateTime)

    /*
     * 数据
     */
    public mut prop value: ?DateTime

    /*
     * 类型名称
     */
    public prop name: String
}

枚举

介绍

枚举

主要接口

public enum MysqlStmtAttrType <: Equatable
public enum MysqlStmtAttrType <: Equatable<MysqlStmtAttrType> {
    | STMT_ATTR_UPDATE_MAX_LENGTH
    | STMT_ATTR_CURSOR_TYPE
    | STMT_ATTR_PREFETCH_ROWS

    /*
     * 枚举是否相等
     *
     * 参数 that - 枚举
     * 返回值 Bool - 是否相等
     */
    public operator func ==(that: MysqlStmtAttrType): Bool

    /*
     * 枚举是否不相等
     *
     * 参数 that - 枚举
     * 返回值 Bool - 是否不相等
     */
    public operator func !=(that: MysqlStmtAttrType): Bool
}
public enum MysqlSetOption <: Equatable
public enum MysqlSetOption <: Equatable<MysqlSetOption>{
    | MYSQL_OPTION_MULTI_STATEMENTS_ON
    | MYSQL_OPTION_MULTI_STATEMENTS_OFF

    /*
     * 枚举是否相等
     *
     * 参数 that - 枚举
     * 返回值 Bool - 是否相等
     */
    public operator func ==(that: MysqlSetOption): Bool

    /*
     * 枚举是否不相等
     *
     * 参数 that - 枚举
     * 返回值 Bool - 是否不相等
     */
    public operator func !=(that: MysqlSetOption): Bool
}
public enum MysqlSetOption <: Equatable
public enum MysqlOption <: Equatable<MysqlOption>{
    | MYSQL_OPT_CONNECT_TIMEOUT
    | MYSQL_OPT_COMPRESS
    | MYSQL_OPT_NAMED_PIPE
    | MYSQL_INIT_COMMAND
    | MYSQL_READ_DEFAULT_FILE
    | MYSQL_READ_DEFAULT_GROUP
    | MYSQL_SET_CHARSET_DIR
    | MYSQL_SET_CHARSET_NAME
    | MYSQL_OPT_LOCAL_INFILE
    | MYSQL_OPT_PROTOCOL
    | MYSQL_SHARED_MEMORY_BASE_NAME
    | MYSQL_OPT_READ_TIMEOUT
    | MYSQL_OPT_WRITE_TIMEOUT
    | MYSQL_OPT_USE_RESULT
    | MYSQL_REPORT_DATA_TRUNCATION
    | MYSQL_OPT_RECONNECT
    | MYSQL_PLUGIN_DIR
    | MYSQL_DEFAULT_AUTH
    | MYSQL_OPT_BIND
    | MYSQL_OPT_SSL_KEY
    | MYSQL_OPT_SSL_CERT
    | MYSQL_OPT_SSL_CA
    | MYSQL_OPT_SSL_CAPATH
    | MYSQL_OPT_SSL_CIPHER
    | MYSQL_OPT_SSL_CRL
    | MYSQL_OPT_SSL_CRLPATH
    | MYSQL_OPT_CONNECT_ATTR_RESET
    | MYSQL_OPT_CONNECT_ATTR_ADD
    | MYSQL_OPT_CONNECT_ATTR_DELETE
    | MYSQL_SERVER_PUBLIC_KEY
    | MYSQL_ENABLE_CLEARTEXT_PLUGIN
    | MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
    | MYSQL_OPT_MAX_ALLOWED_PACKET
    | MYSQL_OPT_NET_BUFFER_LENGTH
    | MYSQL_OPT_TLS_VERSION
    | MYSQL_OPT_SSL_MODE
    | MYSQL_OPT_GET_SERVER_PUBLIC_KEY
    | MYSQL_OPT_RETRY_COUNT
    | MYSQL_OPT_OPTIONAL_RESULTSET_METADATA
    | MYSQL_OPT_SSL_FIPS_MODE
    | MYSQL_OPT_TLS_CIPHERSUITES
    | MYSQL_OPT_COMPRESSION_ALGORITHMS
    | MYSQL_OPT_ZSTD_COMPRESSION_LEVEL
    | MYSQL_OPT_LOAD_DATA_LOCAL_DIR
    | MYSQL_OPT_USER_PASSWORD
    | MYSQL_OPT_SSL_SESSION_DATA

    /*
     * 枚举是否相等
     *
     * 参数 that - 枚举
     * 返回值 Bool - 是否相等
     */
    public operator func ==(that: MysqlOption): Bool

    /*
     * 枚举是否不相等
     *
     * 参数 that - 枚举
     * 返回值 Bool - 是否不相等
     */
    public operator func !=(that: MysqlOption): Bool
}
public enum MysqlSetOption <: Equatable
public enum MysqlShutdownLevel <: Equatable<MysqlShutdownLevel>{
    | SHUTDOWN_DEFAULT
    | SHUTDOWN_WAIT_CONNECTIONS
    | SHUTDOWN_WAIT_TRANSACTIONS
    | SHUTDOWN_WAIT_UPDATES
    | SHUTDOWN_WAIT_ALL_BUFFERS
    | SHUTDOWN_WAIT_CRITICAL_BUFFERS
    | KILL_QUERY
    | KILL_CONNECTION

    /*
     * 枚举是否相等
     *
     * 参数 that - 枚举
     * 返回值 Bool - 是否相等
     */
    public operator func ==(that: MysqlShutdownLevel): Bool

    /*
     * 枚举是否不相等
     *
     * 参数 that - 枚举
     * 返回值 Bool - 是否不相等
     */
    public operator func !=(that: MysqlShutdownLevel): Bool
}

非CDBC接口扩展

字符集接口

介绍

字符集相关接口

主要接口

public class MysqlCharSetApi
public class MysqlCharSetApi {
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlConnection - 连接
     */
    public init(mysqlConnection: MysqlConnection)

    /*
     * 当前连接的默认字符集名称
     *
     * 返回值 String - 默认字符集名称
     */
    public func mysqlCharacterSetName(): String

    /*
     * 设置当前连接默认字符集
     *
     * 参数 charset - 默认字符集
     * 返回值 Int32 - 设置结果
     */
    public func mysqlSetCharacterSet(charset: String): Int32
}

连接接口

介绍

连接相关接口

主要接口

public class MysqlConnectionApi
public class MysqlConnectionApi {
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlConnection - 连接
     */
    public init(mysqlConnection: MysqlConnection)

    /*
     * 在打开的连接上更改用户和数据库
     *
     * 参数 user - 用户名
     * 参数 passwd - 密码
     * 参数 db - 数据库名称
     * 返回值 Bool - 打开结果
     */
    public func mysqlChangeUser(user: String, passwd: String, db: String): Bool

    /*
     * 选择数据库
     *
     * 参数 db - 数据库名称
     * 返回值 Int32 - 选择结果
     */
    public func mysqlSelectDb(db: String): Int32

    /*
     * 重置连接以清除会话状态
     *
     * 返回值 Int32 - 结果
     */
    public func mysqlResetConnection(): Int32
}

信息接口

介绍

信息相关接口

主要接口

public class MysqlInfoApi
public class MysqlInfoApi {
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlConnection - 连接
     */
    public init(mysqlConnection: MysqlConnection)

    /*
     * 最近调用的 MySQL 函数的错误号
     *
     * 返回值 UInt32 - 错误号
     */
    public func mysqlErrno(): UInt32

    /*
     * 最近调用的 MySQL 函数的错误信息
     *
     * 返回值 String - 错误信息
     */
    public func mysqlError(): String

    /*
     * 最近调用的 MySQL 函数的 SQLSTATE 值
     *
     * 返回值 String - SQLSTATE 值
     */
    public func mysqlSqlstate(): String

    /*
     * 上一个语句的警告计数
     *
     * 返回值 UInt32 - 警告计数
     */
    public func mysqlWarningCount(): UInt32

    /*
     * 有关最近执行的语句的信息
     *
     * 返回值 String - 最近执行的语句的信息
     */
    public func mysqlInfo(): String

    /*
     * 将调试信息写入错误日志
     *
     * 返回值 Int32 - 结果
     */
    public func mysqlDumpDebugInfo(): Int32
}

匹配列表信息接口

介绍

信息相关接口

主要接口

public class MysqlListApi
public class MysqlListApi {
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlConnection - 连接
     */
    public init(mysqlConnection: MysqlConnection)

    /*
     * 返回与正则表达式匹配的数据库名称
     *
     * 参数 wild - 正则表达式
     * 返回值 CPointer<Unit> - 数据库名称
     */
    public func mysqlListDbs(wild: String): CPointer<Unit>

    /*
     * 返回与正则表达式匹配的表名
     *
     * 参数 wild - 正则表达式
     * 返回值 CPointer<Unit> - 表名
     */
    public func mysqlListTables(wild: String): CPointer<Unit>

    /*
     * 当前服务器线程列表
     *
     * 返回值 CPointer<Unit> - 服务器线程列表
     */
    public func mysqlListTables(): CPointer<Unit>

    /*
     * 返回与正则表达式匹配的字段名称
     *
     * 参数 table - 表名
     * 参数 wild - 正则表达式
     * 返回值 CPointer<Unit> - 字段名称
     */
    public func mysqlListFields(table: String, wild: String): CPointer<Unit>
}

直接连接接口

介绍

直连数据库

主要接口

public class MysqlRecordApi
public class MysqlRecordApi {
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlConnection - 连接
     */
    public init(mysqlConnection: MysqlConnection)

    /*
     * 执行语句
     *
     * 参数 q - sql语句
     * 返回值 Int32 - 返回状态
     */
    public func mysqlQuery(q: String): Int32

    /*
     * 查询语句
     *
     * 参数 q - sql语句
     * 参数 length - sql语句长度
     * 返回值 Int32 - 返回状态
     */
    public func mysqlSendQuery(q: String): Int32

    /*
     * 执行语句
     *
     * 参数 q - sql语句
     * 参数 length - sql语句的字节长度
     * 返回值 Int32 - 返回状态
     */
    public func mysqlRealQuery(q: String): Int32

    /*
     * 检索和存储整个结果集
     *
     * 返回值 CPointer<Unit> - 结果集指针
     */
    public func mysqlStoreResult(): CPointer<Unit>

    /*
     * 结果集中的列数
     *
     * 参数 result - 结果集
     * 返回值 UInt32 - 列数
     */
    public func mysqlNumFields(result: CPointer<Unit>): UInt32

    /*
     * 确定是否已读取结果集的最后一行
     *
     * 参数 result - 结果集
     * 返回值 Bool - 是否是最后一行
     */
    public func mysqlEof(result: CPointer<Unit>): Bool

    /*
     * 结果集中的行数
     *
     * 参数 result - 结果集
     * 返回值 UInt64 - 行数
     */
    public func mysqlNumRows(result: CPointer<Unit>): UInt64

    /*
     * 提取下一个结果集行
     *
     * 参数 result - 结果集
     * 返回值 CPointer<CString> - 下一个结果集行
     */
    public func mysqlFetchRow(result: CPointer<Unit>): CPointer<CString>

    /*
     * 上次更新、删除或插入语句更改/删除/插入的行数
     *
     * 返回值 UInt64 - 行数
     */
    public func mysqlAffectedRows(): UInt64

    /*
     * 释放结果集内存
     *
     * 参数 result - 结果集
     */
    public func mysqlFreeResult(result: CPointer<Unit>): Unit

    /*
     * 为列生成的 ID 以前的声明AUTO_INCREMENT
     *
     * 返回值 UInt64 - 生成的插入id
     */
    public func mysqlInsertId(): UInt64
}

服务接口

介绍

服务相关接口

主要接口

public class MysqlServerApi
public class MysqlServerApi {
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlConnection - 连接
     */
    public init(mysqlConnection: MysqlConnection) 

    /*
     * 初始化 MySQL C API 库
     *
     * 参数 argc - 参数个数
     * 参数 argv - 参数
     * 参数 groups - 要读取的配置文件组名数组
     * 返回值 Int32 - 返回状态
     */
    public func mysqlServerInit(argc: Int32, argv: CPointer<CString>, groups: CPointer<CString>): Int32

    /*
     * 完成 MySQL C API 库
     */
    public func mysqlServerEnd(): Unit

    /*
     * 关闭 MySQL 服务器
     *
     * 参数 shutdownLevel - 关闭方式
     * 返回值 Int32 - 返回状态
     */
    public func mysqlShutdown(shutdownLevel: MysqlShutdownLevel): Int32

    /*
     * 刷新或重置表和缓存
     *
     * 参数 refreshOptions - 刷新选项
     * 返回值 Int32 - 返回状态
     */
    public func mysqlRefresh(refreshOptions: UInt32): Int32

    /*
     * 终止线程
     *
     * 参数 pid - 线程id
     * 返回值 Int32 - 返回状态
     */
    public func mysqlKill(pid: UInt64): Int32
}

ssl接口

介绍

ssl相关

主要接口

public class MysqlSslApi
public class MysqlSslApi {
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlConnection - 连接
     */
    public init(mysqlConnection: MysqlConnection)

    /*
     * 准备与服务器建立 SSL 连接
     *
     * 参数 keyString - 客户端的路径名 私钥文件
     * 参数 cert - 客户端的路径名 公钥证书文件
     * 参数 ca - 证书的路径名 颁发机构 (CA) 证书文件。此选项(如果使用) 必须指定服务器使用的相同证书
     * 参数 capath - 目录的路径名 包含受信任的 SSL CA 证书文件
     * 参数 cipher - 允许的密码列表 用于 SSL 加密
     * 返回值 Bool - 是否成功
     */
    public func mysqlSslSet(keyString: String, cert: String, ca: String, capath: String, cipher: String): Bool

    /*
     * 当前 SSL 密码
     *
     * 返回值 String - 命名用于连接的加密密码的字符串
     */
    public func mysqlGetSslCipher(): String

    /*
     * 会话是否重复使用
     *
     * 返回值 Bool - 会话是否重复使用
     */
    public func mysqlGetSslSessionReused(): Bool

    /*
     * 返回启用 SSL 的连接的会话数据
     *
     * 参数 nTicket - nTicket
     * 参数 outLen - outLen
     */
    public func mysqlGetSslSessionData(nTicket: UInt32, outLen: CPointer<UInt32>): Unit

    /*
     * 释放上次 mysql_get_ssl_session_data() 调用的会话数据句柄
     *
     * 参数 data - 释放的数据
     * 返回值 Bool - 成功或失败
     */
    public func mysqlFreeSslSessionData(data: CPointer<Unit>): Bool
}

mysql预连接接口

介绍

mysql预连接相关接口

主要接口

public class MysqlStmtApi
public class MysqlStmtApi {    
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlStatement - 预执行
     */
    public init(mysqlStatement: MysqlStatement)

    /*
     * 最近调用的MySQL准备语句的错误消息功能
     *
     * 返回值 String - 错误消息
     */
    public func mysqlStmtError(): String

    /*
     * 在服务器端重置语句缓冲区
     *
     * 返回值 Bool - 成功或失败
     */
    public func mysqlStmtReset(): Bool

    /*
     * 释放分配给语句处理程序的资源
     *
     * 返回值 Bool - 成功或失败
     */
    public func mysqlStmtFreeResult(): Bool

    /*
     * 检索和存储整个结果集
     *
     * 返回值 Int32 - 成功的个数
     */
    public func mysqlStmtStoreResult(): Int32

    /*
     * 最近调用的 MySQL 准备语句的错误号
     *
     * 返回值 UInt32 - 错误号
     */
    public func mysqlStmtErrno(): UInt32

    /*
     * 最近调用的 MySQL 准备语句的 SQLSTATE值功能
     *
     * 返回值 String - 包含 SQLSTATE 的以 null 结尾的字符串 错误代码
     */
    public func mysqlStmtSqlstate(): String

    /*
     * 缓冲语句结果集中的行计数
     *
     * 返回值 UInt64 - 行计数
     */
    public func mysqlStmtNumRows(): UInt64

    /*
     * 插入列生成的ID号
     *
     * 返回值 UInt64 - ID号
     */
    public func mysqlStmtInsertId(): UInt64
}

mysql线程接口

介绍

mysql线程相关接口

主要接口

public class MysqlthreadApi
public class MysqlthreadApi {
    /*
     * 初始化非CDBC接口
     *
     * 参数 mysqlConnection - 连接
     */
    public init(mysqlConnection: MysqlConnection)

    /*
     * 当前线程 ID
     *
     * 返回值 UInt64 - 线程 ID
     */
    public func mysqlThreadId(): UInt64

    /*
     * 初始化线程处理程序
     *
     * 返回值 Bool - 是否成功
     */
    public func mysqlThreadInit(): Bool

    /*
     * 	完成线程处理程序
     */
    public func mysqlThreadEnd(): Unit
}

示例

public class MysqlCharSetApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
            rray<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()

    let mysqlCharSetApi: MysqlCharSetApi = MysqlCharSetApi(mysqlConnection)
    @Assert("utf8mb4", mysqlCharSetApi.mysqlCharacterSetName())

    var ret: Int32 = mysqlCharSetApi.mysqlSetCharacterSet("utf8")
    @Assert(true, ret == 0)
    @Assert("utf8mb3", mysqlCharSetApi.mysqlCharacterSetName())

    ret = mysqlCharSetApi.mysqlSetCharacterSet("ascii")
    @Assert(true, ret == 0)
    @Assert("ascii", mysqlCharSetApi.mysqlCharacterSetName())

    ret = mysqlCharSetApi.mysqlSetCharacterSet("gbk")
    @Assert(true, ret == 0)
    @Assert("gbk", mysqlCharSetApi.mysqlCharacterSetName())

    ret = mysqlCharSetApi.mysqlSetCharacterSet("utf8mb4")
    @Assert(true, ret == 0)
    @Assert("utf8mb4", mysqlCharSetApi.mysqlCharacterSetName())

    mysqlConnection.close()
}

public class MysqlConnectionApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
        Array<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()

    let mysqlConnectionApi: MysqlConnectionApi = MysqlConnectionApi(mysqlConnection)
    let ret: Int32 = mysqlConnectionApi.mysqlSelectDb("mysql")
    @Assert(0, ret)

    mysqlConnection.close()
}

public class MysqlInfoApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{ 
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
        Array<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()
    let mysqlInfoApi: MysqlInfoApi = MysqlInfoApi(mysqlConnection)
    let retErrno: UInt32 = mysqlInfoApi.mysqlErrno()
    @Assert(0, retErrno)
    let strError: String = mysqlInfoApi.mysqlError()
    @Assert("", strError)
    let strState: String = mysqlInfoApi.mysqlSqlstate()
    @Assert("00000", strState)
    let retCount: UInt32 = mysqlInfoApi.mysqlWarningCount()
    @Assert(0, retCount)
    let strInfo: String = mysqlInfoApi.mysqlInfo()
    @Assert("", strInfo)
    let retInfo: Int32 = mysqlInfoApi.mysqlDumpDebugInfo()
    @Assert(0, retInfo)

    mysqlConnection.close()
}

public class MysqlListApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
        Array<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()

    let mysqlListApi: MysqlListApi = MysqlListApi(mysqlConnection)
    let mysqlRecordApi: MysqlRecordApi = MysqlRecordApi(mysqlConnection)
    let cp1: CPointer<Unit> = mysqlListApi.mysqlListDbs("information_schema")
    let retFields: UInt32 = mysqlRecordApi.mysqlNumFields(cp1)
    @Assert(1, retFields)
    let retEof: Bool = mysqlRecordApi.mysqlEof(cp1)
    @Assert(true, retEof)
    let retRows: UInt64 = mysqlRecordApi.mysqlNumRows(cp1)
    @Assert(1, retRows)
    unsafe {
        for (i in 0..retRows) {
            var cpCString: CPointer<CString> = mysqlRecordApi.mysqlFetchRow(cp1)
            for (j in 0..retFields) {
                var cString: CString = cpCString.read(Int64(j))
                if (i == 0) {
                    @Assert("information_schema", cString.toString())
                }
            }
        }
    }
    mysqlRecordApi.mysqlFreeResult(cp1)

    mysqlConnection.close()
}

public class MysqlRecordApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
        Array<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()

    let mysqlRecordApi: MysqlRecordApi = MysqlRecordApi(mysqlConnection)

    let retInt32: Int32 = mysqlRecordApi.mysqlQuery("")
    @Assert(1, retInt32)

    // 关闭链接
    mysqlConnection.close()
}

public class MysqlServerApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
        Array<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()

    let mysqlServerApi: MysqlServerApi = MysqlServerApi(mysqlConnection)

    var cpCtringArgv: CPointer<CString> = CPointer<CString>()
    var cpCtringGroups: CPointer<CString> = CPointer<CString>()

    var ret: Int32 = mysqlServerApi.mysqlServerInit(10, cpCtringArgv, cpCtringGroups)
    @Assert(0, ret)

    mysqlServerApi.mysqlServerEnd()

    ret = mysqlServerApi.mysqlRefresh(0)
    @Assert(0, ret)

    ret = mysqlServerApi.mysqlKill(0)
    @Assert(1, ret)

    mysqlConnection.close()
}

public class MysqlSslApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
        Array<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()

    let mysqlSslApi: MysqlSslApi = MysqlSslApi(mysqlConnection)

    var isBool: Bool = mysqlSslApi.mysqlSslSet("", "", "", "", "")
    @Assert(false, isBool)

    var strCipher: String = mysqlSslApi.mysqlGetSslCipher()
    @Assert("", strCipher)

    isBool = mysqlSslApi.mysqlGetSslSessionReused()
    @Assert(false, isBool)

    mysqlSslApi.mysqlGetSslSessionData(0, CPointer<UInt32>())

    isBool = mysqlSslApi.mysqlFreeSslSessionData(CPointer<Unit>())
    @Assert(true, isBool)

    mysqlConnection.close()
}

public class MysqlStmtApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
        Array<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()

    // 删除t_test2名称数据表
    var mysqlStatement1: MysqlStatement = mysqlConnection.prepareStatement("drop table if exists t_test_bigint")
    mysqlStatement1.update()

    // 创建t_test2名称数据表
    var mysqlStatement2: MysqlStatement = mysqlConnection.prepareStatement(
        "create table t_test_bigint(id bigint not null, value1 bigint not null, value2 bigint)"
    )
    mysqlStatement2.update()

    // 通过传入的 sql 语句,返回一个预执行的 Statement 对象实例
    var mysqlStatement3: MysqlStatement = mysqlConnection.prepareStatement(
        "insert into  t_test_bigint(id,value1,value2)  VALUES(1,2,3)"
    )
    mysqlStatement3.update()

    let mysqlStmtApi: MysqlStmtApi = MysqlStmtApi(mysqlStatement3)

    var retBool: Bool = mysqlStmtApi.mysqlStmtReset()
    @Assert(false, retBool)

    var retStr: String = mysqlStmtApi.mysqlStmtError()
    @Assert("", retStr)

    var retUInt32: UInt32 = mysqlStmtApi.mysqlStmtErrno()
    @Assert(0, retUInt32)

    retStr = mysqlStmtApi.mysqlStmtSqlstate()
    @Assert("00000", retStr)

    var retUInt64: UInt64 = mysqlStmtApi.mysqlStmtNumRows()
    @Assert(0, retUInt64)

    retUInt64 = mysqlStmtApi.mysqlStmtInsertId()
    @Assert(0, retUInt64)

    var mysqlStatement9: MysqlStatement = mysqlConnection.prepareStatement("drop table if exists t_test_bigint")
    mysqlStatement9.update()

    mysqlConnection.close()
}

public class MysqlthreadApi

import mysqlclient_ffi.*
import std.unittest.*
import std.unittest.testmacro.*

main():Int64{
    // 初始化数据库驱动
    let mysqlDriver: MysqlDriver = MysqlDriver("mysql")

    // 通过connectionString和选项打开数据源
    let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
        "HOST=127.0.0.1;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
        Array<(String, String)>()
    )

    // 返回一个可用的链接
    let mysqlConnection: MysqlConnection = mysqlDatasource.connect()

    let mysqlthreadApi: MysqlthreadApi = MysqlthreadApi(mysqlConnection)

    let ret1 = mysqlthreadApi.mysqlThreadId()
    mysqlthreadApi.mysqlThreadEnd()

    let retBool = mysqlthreadApi.mysqlThreadInit()
    let ret2 = mysqlthreadApi.mysqlThreadId()

    @Assert(ret1, ret2)
    @Assert(false, retBool)

    mysqlConnection.close()
}