package com.orientechnologies.orient.core.sql;
import static org.testng.AssertJUnit.assertEquals;
import java.util.List;
import org.testng.annotations.Test;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.id.ORID;
import com.orientechnologies.orient.core.metadata.schema.OSchema;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
public class UpdateWithRidParameters {
@Test
public void testRidParameters() {
ODatabaseDocument db = new ODatabaseDocumentTx("memory:" + UpdateWithRidParameters.class.getSimpleName());
db.create();
OSchema schm = db.getMetadata().getSchema();
schm.createClass("testingClass");
schm.createClass("testingClass2");
schm.save();
OCommandSQL cmd = new OCommandSQL("INSERT INTO testingClass SET id = ?");
db.command(cmd).execute(123);
OCommandSQL cmd2 = new OCommandSQL("INSERT INTO testingClass2 SET id = ?");
db.command(cmd2).execute(456);
List<ODocument> docs = db.query(new OSQLSynchQuery<ODocument>("SELECT FROM testingClass2 WHERE id = ?"), 456);
ORID orid = (ORID) docs.get(0).field("@rid", ORID.class);
// This does not work. It silently adds a null instead of the ORID.
OCommandSQL cmd3 = new OCommandSQL("UPDATE testingClass ADD linkedlist = ?");
db.command(cmd3).execute(orid);
// This does work.
OCommandSQL cmd4 = new OCommandSQL("UPDATE testingClass ADD linkedlist = " + orid.toString());
db.command(cmd4).execute();
List<ODocument> docs2 = db.query(new OSQLSynchQuery<ODocument>("SELECT FROM testingClass WHERE id = ?"), 123);
List<ORID> lst = docs2.get(0).field("linkedlist", List.class);
assertEquals(orid, lst.get(0));
assertEquals(orid, lst.get(1));
db.drop();
}
}