Browse Source

[C++] paozhu ORM update (#9795)

* Paozhu update

* Update orm file

* [Paozhu] update orm file

* update paozhu

* update paozhu

* [C++ paozhu] update ORM
Huang ziquan 4 months ago
parent
commit
d80f33aa54

+ 269 - 81
frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortune_mysql.h

@@ -1,6 +1,11 @@
 #ifndef _ORM_DEFAULT_FORTUNE_OPERATE_H
 #define _ORM_DEFAULT_FORTUNE_OPERATE_H
-
+/*
+ *  @author 黄自权 huangziquan
+ *  @date 2022-05-04
+ *  @update 2025-03-12
+ *  @dest ORM MySQL中间连接层
+ */
 #include <iostream>
 #include <mutex>
 #include <string>
@@ -9311,26 +9316,26 @@ M_MODEL& or_leMessage(T val)
             }
             return 0;
         }
-        long long insert(typename B_BASE::meta &insert_data)
+        std::tuple<unsigned int, unsigned long long> insert(typename B_BASE::meta &insert_data)
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makerecordinsertsql(insert_data);
             if (iscommit)
             {
                 iscommit = false;
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
 
@@ -9355,7 +9360,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9364,7 +9369,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9388,12 +9393,14 @@ M_MODEL& or_leMessage(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return insert_last_id;
+                //return insert_last_id;
+                return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9406,29 +9413,29 @@ M_MODEL& or_leMessage(T val)
             catch (...)
             {
             }
-            return 0;
+            return std::make_tuple(0, 0);
         }
 
-        asio::awaitable<long long> async_insert(typename B_BASE::meta &insert_data)
+        asio::awaitable<std::tuple<unsigned int, unsigned long long>> async_insert(typename B_BASE::meta &insert_data)
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makerecordinsertsql(insert_data);
             if (iscommit)
             {
                 iscommit = false;
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 if (islock_conn)
@@ -9452,7 +9459,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9460,7 +9467,7 @@ M_MODEL& or_leMessage(T val)
                 if (n == 0)
                 {
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9484,12 +9491,14 @@ M_MODEL& or_leMessage(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                co_return insert_last_id;
+                //co_return insert_last_id;
+                co_return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9502,29 +9511,29 @@ M_MODEL& or_leMessage(T val)
             catch (...)
             {
             }
-            co_return 0;
+            co_return std::make_tuple(0, 0);
         }
 
-        long long insert(std::vector<typename B_BASE::meta> &insert_data)
+        std::tuple<unsigned int, unsigned long long> insert(std::vector<typename B_BASE::meta> &insert_data)
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makerecordinsertsql(insert_data);
             if (iscommit)
             {
                 iscommit = false;
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
                 if (islock_conn)
@@ -9548,7 +9557,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9557,7 +9566,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9581,12 +9590,14 @@ M_MODEL& or_leMessage(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return insert_last_id;
+                //return insert_last_id;
+                return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9599,29 +9610,29 @@ M_MODEL& or_leMessage(T val)
             catch (...)
             {
             }
-            return 0;
+            return std::make_tuple(0, 0);
         }
 
-        asio::awaitable<long long> async_insert(std::vector<typename B_BASE::meta> &insert_data)
+        asio::awaitable<std::tuple<unsigned int, unsigned long long>> async_insert(std::vector<typename B_BASE::meta> &insert_data)
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makerecordinsertsql(insert_data);
             if (iscommit)
             {
                 iscommit = false;
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 if (islock_conn)
@@ -9645,7 +9656,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9653,7 +9664,7 @@ M_MODEL& or_leMessage(T val)
                 if (n == 0)
                 {
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9676,12 +9687,14 @@ M_MODEL& or_leMessage(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                co_return insert_last_id;
+                //co_return insert_last_id;
+                co_return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9694,29 +9707,29 @@ M_MODEL& or_leMessage(T val)
             catch (...)
             {
             }
-            co_return 0;
+            co_return std::make_tuple(0, 0);
         }
 
-        long long insert()
+        std::tuple<unsigned int, unsigned long long> insert()
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makeinsertsql();
             if (iscommit)
             {
                 iscommit = false;
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
                 if (islock_conn)
@@ -9740,7 +9753,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9749,7 +9762,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9772,12 +9785,14 @@ M_MODEL& or_leMessage(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return insert_last_id;
+                //return insert_last_id;
+                return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9790,29 +9805,29 @@ M_MODEL& or_leMessage(T val)
             catch (...)
             {
             }
-            return 0;
+            return std::make_tuple(0, 0);
         }
 
-        asio::awaitable<long long> async_insert()
+        asio::awaitable<std::tuple<unsigned int, unsigned long long>> async_insert()
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makeinsertsql();
             if (iscommit)
             {
                 iscommit = false;
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 if (islock_conn)
@@ -9836,7 +9851,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9844,7 +9859,7 @@ M_MODEL& or_leMessage(T val)
                 if (n == 0)
                 {
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9868,12 +9883,14 @@ M_MODEL& or_leMessage(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                co_return insert_last_id;
+                //co_return insert_last_id;
+                co_return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9886,10 +9903,10 @@ M_MODEL& or_leMessage(T val)
             catch (...)
             {
             }
-            co_return 0;
+            co_return std::make_tuple(0, 0);
         }
 
-        long long save(bool isrealnew = false)
+        std::tuple<unsigned int, unsigned long long> save(bool isrealnew = false)
         {
             effect_num = 0;
             if (B_BASE::getPK() > 0 && isrealnew == false)
@@ -9908,7 +9925,7 @@ M_MODEL& or_leMessage(T val)
                 sqlstring.append(" where ");
                 if (wheresql.empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 else
                 {
@@ -9929,16 +9946,16 @@ M_MODEL& or_leMessage(T val)
                 if (iscommit)
                 {
                     iscommit = false;
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 if (iserror)
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
                 if (islock_conn)
@@ -9962,7 +9979,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9971,7 +9988,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9998,14 +10015,15 @@ M_MODEL& or_leMessage(T val)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return effect_num;
+                //return effect_num;
+                return std::make_tuple(effect_num, 0);
             }
             else
             {
                 sqlstring = B_BASE::_makeinsertsql();
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
                 if (islock_conn)
@@ -10029,7 +10047,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -10038,7 +10056,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -10062,17 +10080,19 @@ M_MODEL& or_leMessage(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return insert_last_id;
+                //return insert_last_id;
+                return std::make_tuple(effect_num, insert_last_id);
             }
-            return 0;
+            return std::make_tuple(0, 0);
         }
 
-        asio::awaitable<long long> async_save(bool isrealnew = false)
+        asio::awaitable<std::tuple<unsigned int, unsigned long long>> async_save(bool isrealnew = false)
         {
             effect_num = 0;
             if (B_BASE::getPK() > 0 && isrealnew == false)
@@ -10091,7 +10111,7 @@ M_MODEL& or_leMessage(T val)
                 sqlstring.append(" where ");
                 if (wheresql.empty())
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 else
                 {
@@ -10112,19 +10132,19 @@ M_MODEL& or_leMessage(T val)
                 if (iscommit)
                 {
                     iscommit = false;
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 if (iserror)
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 try
                 {
                     if (conn_empty())
                     {
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
 
                     if (islock_conn)
@@ -10148,7 +10168,7 @@ M_MODEL& or_leMessage(T val)
                     {
                         error_msg = edit_conn->error_msg;
                         edit_conn.reset();
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
 
                     unsigned int offset = 0;
@@ -10156,7 +10176,7 @@ M_MODEL& or_leMessage(T val)
                     if (n == 0)
                     {
                         edit_conn.reset();
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
                     pack_info_t temp_pack_data;
                     temp_pack_data.seq_id = 1;
@@ -10184,12 +10204,13 @@ M_MODEL& or_leMessage(T val)
                     {
                         conn_obj->back_edit_conn(std::move(edit_conn));
                     }
-                    co_return effect_num;
+                    co_return std::make_tuple(effect_num, 0);
+                    //co_return effect_num;
                 }
                 catch (const std::exception &e)
                 {
                     error_msg = std::string(e.what());
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 catch (const std::string &e)
                 {
@@ -10197,9 +10218,9 @@ M_MODEL& or_leMessage(T val)
                 }
                 catch (...)
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
             else
             {
@@ -10208,7 +10229,7 @@ M_MODEL& or_leMessage(T val)
                 {
                     if (conn_empty())
                     {
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
                     if (islock_conn)
                     {
@@ -10231,7 +10252,7 @@ M_MODEL& or_leMessage(T val)
                     {
                         error_msg = edit_conn->error_msg;
                         edit_conn.reset();
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
 
                     unsigned int offset = 0;
@@ -10239,7 +10260,7 @@ M_MODEL& or_leMessage(T val)
                     if (n == 0)
                     {
                         edit_conn.reset();
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
                     pack_info_t temp_pack_data;
                     temp_pack_data.seq_id = 1;
@@ -10263,12 +10284,14 @@ M_MODEL& or_leMessage(T val)
                         unsigned int d_offset = 1;
                         effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                         insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                        B_BASE::setPK(insert_last_id);
                     }
                     if (!islock_conn)
                     {
                         conn_obj->back_edit_conn(std::move(edit_conn));
                     }
-                    co_return insert_last_id;
+                    co_return std::make_tuple(effect_num, insert_last_id);
+                    //co_return insert_last_id;
                 }
                 catch (const std::exception &e)
                 {
@@ -10281,9 +10304,9 @@ M_MODEL& or_leMessage(T val)
                 catch (...)
                 {
                 }
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
-            co_return 0;
+            co_return std::make_tuple(0, 0);
         }
 
         std::tuple<std::vector<std::string>, std::map<std::string, unsigned int>, std::vector<std::vector<std::string>>>
@@ -10733,16 +10756,181 @@ M_MODEL& or_leMessage(T val)
         }
         M_MODEL &get() { return *mod; }
         std::string get_query() { return sqlstring; }
-        M_MODEL &start_commit()
+
+        M_MODEL &begin_commit()
         {
+            if (!conn_empty())
+            {
+                return *mod;
+            }
+            islock_conn = true;
+            
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = conn_obj->get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = conn_obj->get_edit_conn();
+            }
+            sqlstring="start transaction";
+            edit_conn->write_sql(sqlstring);
             iscommit = true;
+
+            
             return *mod;
         }
-        M_MODEL &end_commit()
+        M_MODEL &rollback()
         {
+            if(iscommit==false)
+            {
+                error_msg = "not begin_commit";
+                iserror   = true;
+                return *mod;
+            }
+            if (!conn_empty())
+            {
+                return *mod;
+            }
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = conn_obj->get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = conn_obj->get_edit_conn();
+            }
+            sqlstring="rollback";
+            edit_conn->write_sql(sqlstring);
+
             iscommit = false;
+            islock_conn = false;
             return *mod;
         }
+        M_MODEL &commit()
+        {
+            if(iscommit==false)
+            {
+                error_msg = "not begin_commit";
+                iserror   = true;
+                return *mod;
+            }
+            if (!conn_empty())
+            {
+                return *mod;
+            }
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = conn_obj->get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn =conn_obj->get_edit_conn();
+            }
+            sqlstring="commit";
+            edit_conn->write_sql(sqlstring);
+
+            iscommit = false;
+            islock_conn = false;
+            return *mod;
+        }
+
+
+        asio::awaitable<bool> async_begin_commit()
+        {
+            if (!conn_empty())
+            {
+                co_return false;
+            }
+            islock_conn = true;
+
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = co_await conn_obj->async_get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = co_await conn_obj->async_get_edit_conn();
+            }
+            sqlstring="start transaction";
+            co_await edit_conn->async_write_sql(sqlstring);
+            iscommit = true;
+
+            co_return false;
+        }
+        asio::awaitable<bool> async_rollback()
+        {
+            if(iscommit==false)
+            {
+                error_msg = "not begin_commit";
+                iserror   = true;
+                co_return false;
+            }
+            if (!conn_empty())
+            {
+                co_return false;
+            }
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = co_await conn_obj->async_get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = co_await conn_obj->async_get_edit_conn();
+            }
+            sqlstring="rollback";
+            co_await edit_conn->async_write_sql(sqlstring);
+
+            iscommit = false;
+            islock_conn = false;
+            co_return true;
+        }
+
+        asio::awaitable<bool> async_commit()
+        {
+            if(iscommit==false)
+            {
+                error_msg = "not begin_commit";
+                iserror   = true;
+                co_return false;
+            }
+            if (!conn_empty())
+            {
+                co_return false;
+            }
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = co_await conn_obj->async_get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = co_await conn_obj->async_get_edit_conn();
+            }
+            sqlstring="commit";
+            co_await edit_conn->async_write_sql(sqlstring);
+
+            iscommit = false;
+            islock_conn = false;
+            co_return true;
+        }
 
         unsigned int effect()
         {

+ 2 - 2
frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h

@@ -1,8 +1,8 @@
 #ifndef ORM_DEFAULT_FORTUNEBASEMATA_H
 #define ORM_DEFAULT_FORTUNEBASEMATA_H
 /*
-*This file is auto create from cli
-*本文件为自动生成 Wed, 26 Mar 2025 14:12:09 GMT
+*This file is auto create from paozhu_cli
+*本文件为自动生成 Tue, 08 Apr 2025 07:55:59 GMT
 ***/
 #include <iostream>
 #include <cstdio>

+ 269 - 81
frameworks/C++/paozhu/paozhu_benchmark/orm/include/world_mysql.h

@@ -1,6 +1,11 @@
 #ifndef _ORM_DEFAULT_WORLD_OPERATE_H
 #define _ORM_DEFAULT_WORLD_OPERATE_H
-
+/*
+ *  @author 黄自权 huangziquan
+ *  @date 2022-05-04
+ *  @update 2025-03-12
+ *  @dest ORM MySQL中间连接层
+ */
 #include <iostream>
 #include <mutex>
 #include <string>
@@ -9151,26 +9156,26 @@ M_MODEL& or_leRandomnumber(T val)
             }
             return 0;
         }
-        long long insert(typename B_BASE::meta &insert_data)
+        std::tuple<unsigned int, unsigned long long> insert(typename B_BASE::meta &insert_data)
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makerecordinsertsql(insert_data);
             if (iscommit)
             {
                 iscommit = false;
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
 
@@ -9195,7 +9200,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9204,7 +9209,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9228,12 +9233,14 @@ M_MODEL& or_leRandomnumber(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return insert_last_id;
+                //return insert_last_id;
+                return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9246,29 +9253,29 @@ M_MODEL& or_leRandomnumber(T val)
             catch (...)
             {
             }
-            return 0;
+            return std::make_tuple(0, 0);
         }
 
-        asio::awaitable<long long> async_insert(typename B_BASE::meta &insert_data)
+        asio::awaitable<std::tuple<unsigned int, unsigned long long>> async_insert(typename B_BASE::meta &insert_data)
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makerecordinsertsql(insert_data);
             if (iscommit)
             {
                 iscommit = false;
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 if (islock_conn)
@@ -9292,7 +9299,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9300,7 +9307,7 @@ M_MODEL& or_leRandomnumber(T val)
                 if (n == 0)
                 {
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9324,12 +9331,14 @@ M_MODEL& or_leRandomnumber(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                co_return insert_last_id;
+                //co_return insert_last_id;
+                co_return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9342,29 +9351,29 @@ M_MODEL& or_leRandomnumber(T val)
             catch (...)
             {
             }
-            co_return 0;
+            co_return std::make_tuple(0, 0);
         }
 
-        long long insert(std::vector<typename B_BASE::meta> &insert_data)
+        std::tuple<unsigned int, unsigned long long> insert(std::vector<typename B_BASE::meta> &insert_data)
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makerecordinsertsql(insert_data);
             if (iscommit)
             {
                 iscommit = false;
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
                 if (islock_conn)
@@ -9388,7 +9397,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9397,7 +9406,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9421,12 +9430,14 @@ M_MODEL& or_leRandomnumber(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return insert_last_id;
+                //return insert_last_id;
+                return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9439,29 +9450,29 @@ M_MODEL& or_leRandomnumber(T val)
             catch (...)
             {
             }
-            return 0;
+            return std::make_tuple(0, 0);
         }
 
-        asio::awaitable<long long> async_insert(std::vector<typename B_BASE::meta> &insert_data)
+        asio::awaitable<std::tuple<unsigned int, unsigned long long>> async_insert(std::vector<typename B_BASE::meta> &insert_data)
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makerecordinsertsql(insert_data);
             if (iscommit)
             {
                 iscommit = false;
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 if (islock_conn)
@@ -9485,7 +9496,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9493,7 +9504,7 @@ M_MODEL& or_leRandomnumber(T val)
                 if (n == 0)
                 {
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9516,12 +9527,14 @@ M_MODEL& or_leRandomnumber(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                co_return insert_last_id;
+                //co_return insert_last_id;
+                co_return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9534,29 +9547,29 @@ M_MODEL& or_leRandomnumber(T val)
             catch (...)
             {
             }
-            co_return 0;
+            co_return std::make_tuple(0, 0);
         }
 
-        long long insert()
+        std::tuple<unsigned int, unsigned long long> insert()
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makeinsertsql();
             if (iscommit)
             {
                 iscommit = false;
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                return 0;
+                return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
                 if (islock_conn)
@@ -9580,7 +9593,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9589,7 +9602,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9612,12 +9625,14 @@ M_MODEL& or_leRandomnumber(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return insert_last_id;
+                //return insert_last_id;
+                return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9630,29 +9645,29 @@ M_MODEL& or_leRandomnumber(T val)
             catch (...)
             {
             }
-            return 0;
+            return std::make_tuple(0, 0);
         }
 
-        asio::awaitable<long long> async_insert()
+        asio::awaitable<std::tuple<unsigned int, unsigned long long>> async_insert()
         {
             effect_num = 0;
             sqlstring  = B_BASE::_makeinsertsql();
             if (iscommit)
             {
                 iscommit = false;
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             if (iserror)
             {
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
 
             try
             {
                 if (conn_empty())
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 if (islock_conn)
@@ -9676,7 +9691,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9684,7 +9699,7 @@ M_MODEL& or_leRandomnumber(T val)
                 if (n == 0)
                 {
                     edit_conn.reset();
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9708,12 +9723,14 @@ M_MODEL& or_leRandomnumber(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                co_return insert_last_id;
+                //co_return insert_last_id;
+                co_return std::make_tuple(effect_num, insert_last_id);
             }
             catch (const std::exception &e)
             {
@@ -9726,10 +9743,10 @@ M_MODEL& or_leRandomnumber(T val)
             catch (...)
             {
             }
-            co_return 0;
+            co_return std::make_tuple(0, 0);
         }
 
-        long long save(bool isrealnew = false)
+        std::tuple<unsigned int, unsigned long long> save(bool isrealnew = false)
         {
             effect_num = 0;
             if (B_BASE::getPK() > 0 && isrealnew == false)
@@ -9748,7 +9765,7 @@ M_MODEL& or_leRandomnumber(T val)
                 sqlstring.append(" where ");
                 if (wheresql.empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 else
                 {
@@ -9769,16 +9786,16 @@ M_MODEL& or_leRandomnumber(T val)
                 if (iscommit)
                 {
                     iscommit = false;
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 if (iserror)
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
                 if (islock_conn)
@@ -9802,7 +9819,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9811,7 +9828,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9838,14 +9855,15 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return effect_num;
+                //return effect_num;
+                return std::make_tuple(effect_num, 0);
             }
             else
             {
                 sqlstring = B_BASE::_makeinsertsql();
                 if (conn_empty())
                 {
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 //auto conn = conn_obj->get_edit_conn();
                 if (islock_conn)
@@ -9869,7 +9887,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
 
                 unsigned int offset = 0;
@@ -9878,7 +9896,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     error_msg = edit_conn->error_msg;
                     edit_conn.reset();
-                    return 0;
+                    return std::make_tuple(0, 0);
                 }
                 pack_info_t temp_pack_data;
                 temp_pack_data.seq_id = 1;
@@ -9902,17 +9920,19 @@ M_MODEL& or_leRandomnumber(T val)
                     unsigned int d_offset = 1;
                     effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                     insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                    B_BASE::setPK(insert_last_id);
                 }
                 if (!islock_conn)
                 {
                     conn_obj->back_edit_conn(std::move(edit_conn));
                 }
-                return insert_last_id;
+                //return insert_last_id;
+                return std::make_tuple(effect_num, insert_last_id);
             }
-            return 0;
+            return std::make_tuple(0, 0);
         }
 
-        asio::awaitable<long long> async_save(bool isrealnew = false)
+        asio::awaitable<std::tuple<unsigned int, unsigned long long>> async_save(bool isrealnew = false)
         {
             effect_num = 0;
             if (B_BASE::getPK() > 0 && isrealnew == false)
@@ -9931,7 +9951,7 @@ M_MODEL& or_leRandomnumber(T val)
                 sqlstring.append(" where ");
                 if (wheresql.empty())
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 else
                 {
@@ -9952,19 +9972,19 @@ M_MODEL& or_leRandomnumber(T val)
                 if (iscommit)
                 {
                     iscommit = false;
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 if (iserror)
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
 
                 try
                 {
                     if (conn_empty())
                     {
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
 
                     if (islock_conn)
@@ -9988,7 +10008,7 @@ M_MODEL& or_leRandomnumber(T val)
                     {
                         error_msg = edit_conn->error_msg;
                         edit_conn.reset();
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
 
                     unsigned int offset = 0;
@@ -9996,7 +10016,7 @@ M_MODEL& or_leRandomnumber(T val)
                     if (n == 0)
                     {
                         edit_conn.reset();
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
                     pack_info_t temp_pack_data;
                     temp_pack_data.seq_id = 1;
@@ -10024,12 +10044,13 @@ M_MODEL& or_leRandomnumber(T val)
                     {
                         conn_obj->back_edit_conn(std::move(edit_conn));
                     }
-                    co_return effect_num;
+                    co_return std::make_tuple(effect_num, 0);
+                    //co_return effect_num;
                 }
                 catch (const std::exception &e)
                 {
                     error_msg = std::string(e.what());
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
                 catch (const std::string &e)
                 {
@@ -10037,9 +10058,9 @@ M_MODEL& or_leRandomnumber(T val)
                 }
                 catch (...)
                 {
-                    co_return 0;
+                    co_return std::make_tuple(0, 0);
                 }
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
             else
             {
@@ -10048,7 +10069,7 @@ M_MODEL& or_leRandomnumber(T val)
                 {
                     if (conn_empty())
                     {
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
                     if (islock_conn)
                     {
@@ -10071,7 +10092,7 @@ M_MODEL& or_leRandomnumber(T val)
                     {
                         error_msg = edit_conn->error_msg;
                         edit_conn.reset();
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
 
                     unsigned int offset = 0;
@@ -10079,7 +10100,7 @@ M_MODEL& or_leRandomnumber(T val)
                     if (n == 0)
                     {
                         edit_conn.reset();
-                        co_return 0;
+                        co_return std::make_tuple(0, 0);
                     }
                     pack_info_t temp_pack_data;
                     temp_pack_data.seq_id = 1;
@@ -10103,12 +10124,14 @@ M_MODEL& or_leRandomnumber(T val)
                         unsigned int d_offset = 1;
                         effect_num            = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
                         insert_last_id        = edit_conn->pack_real_num((unsigned char *)&temp_pack_data.data[0], d_offset);
+                        B_BASE::setPK(insert_last_id);
                     }
                     if (!islock_conn)
                     {
                         conn_obj->back_edit_conn(std::move(edit_conn));
                     }
-                    co_return insert_last_id;
+                    co_return std::make_tuple(effect_num, insert_last_id);
+                    //co_return insert_last_id;
                 }
                 catch (const std::exception &e)
                 {
@@ -10121,9 +10144,9 @@ M_MODEL& or_leRandomnumber(T val)
                 catch (...)
                 {
                 }
-                co_return 0;
+                co_return std::make_tuple(0, 0);
             }
-            co_return 0;
+            co_return std::make_tuple(0, 0);
         }
 
         std::tuple<std::vector<std::string>, std::map<std::string, unsigned int>, std::vector<std::vector<std::string>>>
@@ -10573,16 +10596,181 @@ M_MODEL& or_leRandomnumber(T val)
         }
         M_MODEL &get() { return *mod; }
         std::string get_query() { return sqlstring; }
-        M_MODEL &start_commit()
+
+        M_MODEL &begin_commit()
         {
+            if (!conn_empty())
+            {
+                return *mod;
+            }
+            islock_conn = true;
+            
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = conn_obj->get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = conn_obj->get_edit_conn();
+            }
+            sqlstring="start transaction";
+            edit_conn->write_sql(sqlstring);
             iscommit = true;
+
+            
             return *mod;
         }
-        M_MODEL &end_commit()
+        M_MODEL &rollback()
         {
+            if(iscommit==false)
+            {
+                error_msg = "not begin_commit";
+                iserror   = true;
+                return *mod;
+            }
+            if (!conn_empty())
+            {
+                return *mod;
+            }
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = conn_obj->get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = conn_obj->get_edit_conn();
+            }
+            sqlstring="rollback";
+            edit_conn->write_sql(sqlstring);
+
             iscommit = false;
+            islock_conn = false;
             return *mod;
         }
+        M_MODEL &commit()
+        {
+            if(iscommit==false)
+            {
+                error_msg = "not begin_commit";
+                iserror   = true;
+                return *mod;
+            }
+            if (!conn_empty())
+            {
+                return *mod;
+            }
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = conn_obj->get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn =conn_obj->get_edit_conn();
+            }
+            sqlstring="commit";
+            edit_conn->write_sql(sqlstring);
+
+            iscommit = false;
+            islock_conn = false;
+            return *mod;
+        }
+
+
+        asio::awaitable<bool> async_begin_commit()
+        {
+            if (!conn_empty())
+            {
+                co_return false;
+            }
+            islock_conn = true;
+
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = co_await conn_obj->async_get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = co_await conn_obj->async_get_edit_conn();
+            }
+            sqlstring="start transaction";
+            co_await edit_conn->async_write_sql(sqlstring);
+            iscommit = true;
+
+            co_return false;
+        }
+        asio::awaitable<bool> async_rollback()
+        {
+            if(iscommit==false)
+            {
+                error_msg = "not begin_commit";
+                iserror   = true;
+                co_return false;
+            }
+            if (!conn_empty())
+            {
+                co_return false;
+            }
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = co_await conn_obj->async_get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = co_await conn_obj->async_get_edit_conn();
+            }
+            sqlstring="rollback";
+            co_await edit_conn->async_write_sql(sqlstring);
+
+            iscommit = false;
+            islock_conn = false;
+            co_return true;
+        }
+
+        asio::awaitable<bool> async_commit()
+        {
+            if(iscommit==false)
+            {
+                error_msg = "not begin_commit";
+                iserror   = true;
+                co_return false;
+            }
+            if (!conn_empty())
+            {
+                co_return false;
+            }
+            if (islock_conn)
+            {
+                if (!edit_conn)
+                {
+                    edit_conn = co_await conn_obj->async_get_edit_conn();
+                }
+            }
+            else
+            {
+                edit_conn = co_await conn_obj->async_get_edit_conn();
+            }
+            sqlstring="commit";
+            co_await edit_conn->async_write_sql(sqlstring);
+
+            iscommit = false;
+            islock_conn = false;
+            co_return true;
+        }
 
         unsigned int effect()
         {

+ 2 - 2
frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h

@@ -1,8 +1,8 @@
 #ifndef ORM_DEFAULT_WORLDBASEMATA_H
 #define ORM_DEFAULT_WORLDBASEMATA_H
 /*
-*This file is auto create from cli
-*本文件为自动生成 Wed, 26 Mar 2025 14:12:09 GMT
+*This file is auto create from paozhu_cli
+*本文件为自动生成 Tue, 08 Apr 2025 07:55:59 GMT
 ***/
 #include <iostream>
 #include <cstdio>