OrientDB.RequestError: не удается найти исполнителя команды для запроса команды: sql.#11.1

Я экспериментирую с OrientDB (версия сообщества v1.7-rc2)/Oriento (0.4.0)

Функция

function linkChildToParent(oChild, oParent) {
    return (
        oDB.edge.from(oChild).to(oParent)
        .create({"@class": 'OrgUnit_isPartOf_OrgUnit'})
        .tap(log)
        .return(oChild)
    );
}

Сбой с исключением

C:\Users\Udo\workspace\NodeOrient\node_modules\oriento\node_modules\bluebird\js\main\async.js:93
                throw res.e;
                         ^
OrientDB.RequestError: Cannot find a command executor for the command request: sql.#11.1
    at Operation.parseError (C:\Users\Udo\workspace\NodeOrient\node_modules\oriento\lib\transport\binary\protocol\operation.js:806:13)
    at Operation.consume (C:\Users\Udo\workspace\NodeOrient\node_modules\oriento\lib\transport\binary\protocol\operation.js:396:35)
    at Connection.process (C:\Users\Udo\workspace\NodeOrient\node_modules\oriento\lib\transport\binary\connection.js:324:17)
    at Connection.handleSocketData (C:\Users\Udo\workspace\NodeOrient\node_modules\oriento\lib\transport\binary\connection.js:250:17)
    at Socket.emit (events.js:95:17)
    at Socket.<anonymous> (_stream_readable.js:764:14)
    at Socket.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:426:10)
    at emitReadable (_stream_readable.js:422:5)
    at readableAddChunk (_stream_readable.js:165:9)
From previous event:
    at Function.Promise$All [as all] (C:\Users\Udo\workspace\NodeOrient\node_modules\bluebird\js\main\promise.js:193:12)
    at generateDependents (C:\Users\Udo\workspace\NodeOrient\setupOrgDB.js:202:35)
From previous event:
    at Function.Promise$Join [as join] (C:\Users\Udo\workspace\NodeOrient\node_modules\bluebird\js\main\join.js:118:15)
    at BinaryTransport.populateDB (C:\Users\Udo\workspace\NodeOrient\setupOrgDB.js:219:20)

Поэтому я отлаживал драйвер, пока не нашел

function createEdge (db, config, from, to) {
  var command = "CREATE EDGE",
      className, attributes;
  config = edgeConfig(config);
  className = config[0];
  attributes = config[1];
  command += ' ' + className + ' FROM ' + edgeReference(from)  + ' TO ' + edgeReference(to);

  if (attributes) {
    command += ' CONTENT ' + JSON.stringify(attributes);
  }

  return db.query(command);
}

Содержимое команды прямо перед return db.query(command);

CREATE EDGE OrgUnit_isPartOf_OrgUnit FROM (#11.1) TO (#11.0)

Затем я использовал консоль (на основе браузера), чтобы убедиться, что OrgUnit_isPartOf_OrgUnit действительно наследуется от Edge. Я также проверил, что он свяжет OrgUnit с OrgUnit Vertices и что OrgUnit является производным от Vertex. Я также дважды проверил, что записи № 11.1 и № 11.0 действительно присутствуют в базе данных.

Затем я выпустил

CREATE EDGE OrgUnit_isPartOf_OrgUnit FROM (#11.1) TO (#11.0)

прямо в консоли и получил

com.orientechnologies.orient.core.command.OCommandExecutorNotFoundException: Cannot find a command executor for the command request: sql.#11:1

Это в основном то же исключение. С помощью Google я нашел некоторые Javadoc для этого исключения. Однако мне это совсем не помогло.

Что не так и как я могу это исправить?


person Udo Klein    schedule 23.09.2014    source источник


Ответы (1)


Правильная команда должна быть без скобок. Круглая скобка выполняет подзапросы:

CREATE EDGE OrgUnit_isPartOf_OrgUnit FROM #11:1 TO #11:0

Для получения дополнительной информации см. команду Create Edge.

person Lvca    schedule 23.09.2014
comment
Интересный. Теперь мне нужно выяснить, почему построитель запросов поставил скобки. Но это определенно вызвало проблему. - person Udo Klein; 24.09.2014