Comments (5)
database:sql server 2016.
Call to start transaction: let mut txn = CONTEXT.rb.acquire_begin().await?; Execute transaction error: Token error: 'Incorrect syntax near 'begin'.' on server WIN-B9A9 executing on line 1 (code: 102, state: 1, class: 15)
Sql server does not support 'begin'.
Added the following method: pub async fn acquire_begin_transaction(&self) -> Result<RBatisTxExecutor, Error> { let pool = self.rb.get_pool()?; let mut conn = pool.get().await?; conn.exec("BEGIN TRAN", vec![]).await?; Ok(RBatisTxExecutor { tx_id: new_snowflake_id(), conn: Mutex::new(Box::new(conn)), rb: self.rb.clone(), done: false, }) } Execute error: Token error: 'Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.' on server WIN-B9A9 executing on line 0 (code: 266, state: 2, class: 16)
Please give me some advice?
SQL Server 2016 supports starting a transaction using BEGIN TRANSACTION
, which is used to explicitly start a transaction in SQL Server. Through BEGIN TRANSACT, you can start a new transaction and then end or roll back the transaction in either COMMIT TRANSACT or Rollback TRANSACT.
I suggest you use an interceptor to modify the transaction statement start to BEGIN TRANSACTION
#[derive(Debug)]
pub struct TxIntercept {}
#[async_trait]
impl Intercept for TxIntercept {
async fn before(
&self,
_task_id: i64,
_rb: &dyn Executor,
sql: &mut String,
_args: &mut Vec<Value>,
_result: ResultType<&mut Result<ExecResult, Error>, &mut Result<Vec<Value>, Error>>,
) -> Result<bool, Error> {
if sql.contains("begin") {
*sql = sql.replace("begin","BEGIN TRANSACTION").to_string();
} else if sql.contains("commit") {
*sql = sql.replace("commit","COMMIT TRANSACTION").to_string();
} else if sql.contains("rollback") {
*sql = sql.replace("rollback","ROLLBACK TRANSACTION").to_string();
}
Ok(true)
}
}
#[tokio::main]
pub async fn main() {
fast_log::init(fast_log::Config::new().console()).expect("rbatis init fail");
defer!(|| log::logger().flush());
let rb = RBatis::new();
rb.intercepts.push(Arc::new(TxIntercept {}));
}
from rbatis.
database:sql server 2016.
Call to start transaction: let mut txn = CONTEXT.rb.acquire_begin().await?; Execute transaction error: Token error: 'Incorrect syntax near 'begin'.' on server WIN-B9A9 executing on line 1 (code: 102, state: 1, class: 15)
Sql server does not support 'begin'.
Added the following method: pub async fn acquire_begin_transaction(&self) -> Result<RBatisTxExecutor, Error> { let pool = self.rb.get_pool()?; let mut conn = pool.get().await?; conn.exec("BEGIN TRAN", vec![]).await?; Ok(RBatisTxExecutor { tx_id: new_snowflake_id(), conn: Mutex::new(Box::new(conn)), rb: self.rb.clone(), done: false, }) } Execute error: Token error: 'Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.' on server WIN-B9A9 executing on line 0 (code: 266, state: 2, class: 16)
Please give me some advice?
SQL Server 2016 supports starting a transaction using
BEGIN TRANSACTION
, which is used to explicitly start a transaction in SQL Server. Through BEGIN TRANSACT, you can start a new transaction and then end or roll back the transaction in either COMMIT TRANSACT or Rollback TRANSACT.I suggest you use an interceptor to modify the transaction statement start to
BEGIN TRANSACTION
#[derive(Debug)] pub struct TxIntercept {} #[async_trait] impl Intercept for TxIntercept { async fn before( &self, _task_id: i64, _rb: &dyn Executor, sql: &mut String, _args: &mut Vec<Value>, _result: ResultType<&mut Result<ExecResult, Error>, &mut Result<Vec<Value>, Error>>, ) -> Result<bool, Error> { if sql.contains("begin") { *sql = sql.replace("begin","BEGIN TRANSACTION").to_string(); } else if sql.contains("commit") { *sql = sql.replace("commit","COMMIT TRANSACTION").to_string(); } else if sql.contains("rollback") { *sql = sql.replace("rollback","ROLLBACK TRANSACTION").to_string(); } Ok(true) } } #[tokio::main] pub async fn main() { fast_log::init(fast_log::Config::new().console()).expect("rbatis init fail"); defer!(|| log::logger().flush()); let rb = RBatis::new(); rb.intercepts.push(Arc::new(TxIntercept {})); }
Thank you very much that the interceptor has taken effect.
But it still prompts this error:Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
from rbatis.
Thank you very much that the interceptor has taken effect.
But it still prompts this error:Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
did you call commit method or rollback ?
from rbatis.
Thank you very much that the interceptor has taken effect.
But it still prompts this error:Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
did you call commit method or rollback ?
![image](https://private-user-images.githubusercontent.com/6611189/292986977-d8366352-dd9a-42ee-a25b-0405d2c92850.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTczNTgwODgsIm5iZiI6MTcxNzM1Nzc4OCwicGF0aCI6Ii82NjExMTg5LzI5Mjk4Njk3Ny1kODM2NjM1Mi1kZDlhLTQyZWUtYTI1Yi0wNDA1ZDJjOTI4NTAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDYwMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA2MDJUMTk0OTQ4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NWQ0MDA3MTA2YmVhNjQxMDYyZGI3MWQ0YjUwNGY5Zjg5MWM4ODk1YjEzZTBmYWE1MjIxZGYxNzQxMzg5ODMxZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.2dhBbY6ClvlqrMTzwqVE9TfkDWRd2C4hNdnnz9jEgPA)
from rbatis.
#488 Already solved
from rbatis.
Related Issues (20)
- Setting result error using py_sql with single result HOT 1
- Is there any synchronized Chinese document? HOT 3
- Unable to update column to null.
- Prior code to get SQLite version using sqlite_version() works. Now broken. [Solved Manually. See comments] HOT 2
- test_decode_time_zone error
- Variable `recordsValue` should have snake_case name, e.g. `records_value` HOT 5
- Common field processing issues HOT 2
- The document needs to be updated HOT 2
- How to dynamically specify schema HOT 14
- add return primary key value in postgresql HOT 1
- How to use tracing log in rbatis-v4 version HOT 2
- field value with json string, return invalid type: map, expected String error HOT 2
- Setting the maximum connection pool doesn't work well HOT 3
- Hello, I encountered an issue with a plugin dynamically modifying SQL HOT 4
- MySQL keeps re-establishing connections HOT 5
- Does the latest version not support Option single result? HOT 4
- How to use rbatis to implement dynamic structure like Java return value map < string, Object > HOT 6
- rbatis::crud!(Book {},"t_book"); No effect HOT 1
- postgres page err HOT 1
- Mssql insert batch error HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rbatis.