/**
         * To make sure SkyWalking will be available at the next release of ShardingSphere,
         * a new plugin should be provided to SkyWalking project if this API changed.
         *
         * @see <a href="https://github.com/apache/skywalking/blob/master/docs/en/guides/Java-Plugin-Development-Guide.md#user-content-plugin-development-guide">Plugin Development Guide</a>
         *
         * @param statementExecuteUnit statement execute unit
         * @param isTrunkThread is trunk thread
         * @param dataMap data map
         * @return result
         * @throws SQLException SQL exception
         */
        private T Execute0(CommandExecuteUnit commandExecuteUnit, bool isTrunkThread, IDictionary <string, object> dataMap)
        {
            ExecutorExceptionHandler.SetExceptionThrow(isExceptionThrown);
            IDataSourceMetaData dataSourceMetaData = GetDataSourceMetaData(commandExecuteUnit.Command);
            var hookManager = SqlExecutionHookManager.GetInstance();

            try
            {
                ExecutionUnit executionUnit = commandExecuteUnit.ExecutionUnit;
                hookManager.Start(executionUnit.GetDataSourceName(), executionUnit.GetSqlUnit().GetSql(), executionUnit.GetSqlUnit().GetParameterContext(), dataSourceMetaData, isTrunkThread, dataMap);
                T result = OnSqlExecute(executionUnit.GetSqlUnit().GetSql(), commandExecuteUnit.Command, commandExecuteUnit.ConnectionMode);
                hookManager.FinishSuccess();
                return(result);
            }
            catch (Exception ex)
            {
                hookManager.FinishFailure(ex);
                ExecutorExceptionHandler.HandleException(ex);
                return(default);
示例#2
0
 public void Start(string dataSourceName, string sql, ParameterContext parameterContext, IDataSourceMetaData dataSourceMetaData, bool isTrunkThread, IDictionary <string, object> shardingExecuteDataMap)
 {
     foreach (var sqlExecutionHook in _sqlExecutionHooks)
     {
         sqlExecutionHook.Start(dataSourceName, sql, parameterContext, dataSourceMetaData, isTrunkThread, shardingExecuteDataMap);
     }
 }
示例#3
0
 /// <summary>
 /// 判断是否在自同一个数据库实例里面
 /// </summary>
 /// <param name="sample"></param>
 /// <param name="target"></param>
 /// <returns></returns>
 private bool IsInSameDatabaseInstance(IDataSourceMetaData sample, IDataSourceMetaData target)
 {
     return(sample is IMemorizedDataSourceMetaData
         ? object.Equals(target.GetSchema(), sample.GetSchema()) : target.GetHostName().Equals(sample.GetHostName()) && target.GetPort() == sample.GetPort());
 }