Не удалось найти запрос с идентификатором: [xx] - PullRequest
0 голосов
/ 04 апреля 2019

Я получаю сообщение об ошибке при выполнении оператора SQL DDL через соединение ODBC в .Net Core.

Я использую свежий экземпляр Ignite (v2.7) по умолчанию, подключенный из .Net Core (v2.2) через OdbcConnection (System.Data.Odbc v4.5.0).

Трассировка стека:

2019-56-04 10:56:57.622 [ERROR] CREATE TABLE X (Id varchar(255) not null, Value int, PRIMARY KEY (Id));CREATE TABLE Y (Id varchar(255) not null, Value int, PRIMARY KEY (Id));
2019-56-04 10:56:57.710 [ERROR] ERROR [HY000] Failed to find query with ID: 0
2019-56-04 10:56:57.718 [ERROR]    at System.Data.Odbc.OdbcDataReader.NextResult(Boolean disposing, Boolean allresults)
   at System.Data.Odbc.OdbcDataReader.FirstResult()
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
   at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()
   at System.Data.Common.DbCommand.ExecuteNonQueryAsync(CancellationToken cancellationToken)

Я заметил, что если я разделил два оператора на отдельные вызовы ExecuteNonQuery, это сработало, поэтому я предполагаю, что Ignite не нравится несколько операторов, когда он получает количество затронутых записей.

Я обнаружил похожую проблему из v2.3, но я думаю, что это не так, и я получаю ее в v2.7.

Репродуктор:

using System;
using System.Data.Odbc;

namespace IgniteMultistatementReproducer {
    internal class Program {
        private static void Main(string[] args) {
            try {
                using (var conn = new OdbcConnection($"DRIVER={{Apache Ignite}};ADDRESS=localhost:10800;")) {
                    conn.Open();
                    var cmd = new OdbcCommand {
                        CommandText = "CREATE TABLE X (Id varchar(255) not null, Value int, PRIMARY KEY (Id));CREATE TABLE Y (Id varchar(255) not null, Value int, PRIMARY KEY (Id));",
                        Connection = conn
                    };
                    var numRecordsAffected = cmd.ExecuteNonQuery();
                    Console.WriteLine($"Num Records Affected: {numRecordsAffected}");
                }
            } catch (Exception ex) {
                Console.WriteLine(ex);
            }
        }
    }
}
...