Ppeixianzhongdev 56.4
0b3d0ff2创建于 2024年11月1日历史提交
// 3rd_party_lib:mysqlclient-ffi/build/mysqlclient
// 3rd_party_lib_ohos:mysqlclient-ffi/build/aarch64-linux-ohos/mysqlclient
import std.database.sql.*
import std.io.*
import std.time.* 
import std.regex.*
import mysqlclient_ffi.*
import std.math.*
import std.collection.*

main() {
    println("TCS: mysqlclient-ffi, time elapsed: 1 ns, RESULT:")
    let threadCount = 100
    let loopCount = 10000
    let futures = ArrayList<Future<ArrayList<String>>>()
    let start = DateTime.now()
    for (_ in 0..threadCount) {
        let thread = spawn {
            let mysqlDriver: MysqlDriver = MysqlDriver("mysql")
            let mysqlDatasource: MysqlDatasource = mysqlDriver.open(
            "HOST=;USER=root;PASSWD=123;DB=mysql;PORT=3306;UNIX_SOCKET=;CLIENT_FLAG=0",
            Array<(String, String)>()
            )
            let conn: MysqlConnection = mysqlDatasource.connect()
            var result=ArrayList<String>()
            for (_ in 0..loopCount) {
                try {
                    var prepareStatement = conn.prepareStatement("drop table if exists test")
                    prepareStatement=conn.prepareStatement("create table test(data text(20) NOT NULL, datanull text(20))")
                    prepareStatement=conn.prepareStatement("insert into test values(?,?)")
                    var str = ByteBuffer(20)
                    str.write("12345678".toUtf8Array())
                    var rowCount = prepareStatement.update([SqlClob(str), SqlNullableClob(None)])
                    if(rowCount.rowCount == 1){
                        result.append("success")
                    }else{
                        result.append("fail")
                    }
                } catch (e: SqlException) {
                    println("e> ${e.toString()}")
                    result.append("fail")
                    continue
                }
            }
            conn.close()
            return result
        }
        futures.append(thread)
    }

    for (f in futures) {
        f.get()
    }

    let end = Duration.since(start).toSeconds()
    var count_fail=0
    for (f in futures){
        var temp_re=f.get()
        for (j in temp_re){
            if(j=="fail"){
                count_fail+=1
            }
        }
    }
    println("TestSuiteMysqlclient-ffi__${threadCount}*${loopCount}: TotalTime:${end} s  TPS: ${Int64((threadCount*loopCount)/end)}  FailRate: ${count_fail/(threadCount*loopCount)*100} %")

    return 0
}