in src/Apache.IoTDB/SessionPool.cs [1378:1423]
public async Task<int> ExecuteNonQueryStatementAsync(string sql)
{
return await ExecuteClientOperationAsync<int>(
async client =>
{
String previousDB = _database;
var req = new TSExecuteStatementReq(client.SessionId, sql, client.StatementId);
var resp = await client.ServiceClient.executeUpdateStatementAsync(req);
var status = resp.Status;
if (resp.__isset.database)
{
this._database = resp.Database;
}
if (_database != previousDB)
{
// all client should switch to the same database
foreach (var c in _clients.ClientQueue)
{
try
{
if (c != client)
{
var switchReq = new TSExecuteStatementReq(c.SessionId, sql, c.StatementId);
await c.ServiceClient.executeUpdateStatementAsync(switchReq);
}
}
catch (Exception e)
{
_logger.LogError("switch database from {0} to {1} failed for {2}, error: {3}", previousDB, _database, c.SessionId, e.Message);
}
}
_logger.LogInformation("switch database from {0} to {1}", previousDB, _database);
}
if (_debugMode)
{
_logger.LogInformation("execute non-query statement {0} message: {1}", sql, status.Message);
}
return _utilFunctions.VerifySuccess(status);
},
errMsg: "Error occurs when executing non-query statement"
);
}