code: public static TextProtocolBackendHandler newInstance(final String sql, final BackendConnection backendConnection) {
          if (sql.toUpperCase().startsWith(ShardingCTLBackendHandlerFactory.SCTL)) {
              return ShardingCTLBackendHandlerFactory.newInstance(sql, backendConnection);
          }
          // TODO use sql parser engine instead of string compare
          Optional<TransactionOperationType> transactionOperationType = TransactionOperationType.getOperationType(sql.toUpperCase());
          if (transactionOperationType.isPresent()) {
              return new TransactionBackendHandler(transactionOperationType.get(), backendConnection);
          }
          if (sql.toUpperCase().contains(SET_AUTOCOMMIT_1)) {
              return backendConnection.getStateHandler().isInTransaction() ? new TransactionBackendHandler(TransactionOperationType.COMMIT, backendConnection) : new SkipBackendHandler();
          }
          SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge();
          return SQLType.DAL == sqlStatement.getType() ? createDALBackendHandler(sqlStatement, sql, backendConnection) : new QueryBackendHandler(sql, backendConnection);
      }
docs: Create new instance of text protocol backend handler.
  
  @param sql SQL to be executed
  @param backendConnection backend connection
  @return instance of text protocol backend handler