Search in sources :

Example 1 with FilterParams

use of com.mysql.cj.xdevapi.FilterParams in project aws-mysql-jdbc by awslabs.

the class XProtocolTest method tableInsert.

@Test
public void tableInsert() {
    assumeTrue(this.isSetForXTests, PropertyDefinitions.SYSP_testsuite_url_mysqlx + " must be set to run this test.");
    this.protocol.send(this.messageBuilder.buildSqlStatement("drop table if exists tableInsert"), 0);
    this.protocol.readQueryResult(new StatementExecuteOkBuilder());
    this.protocol.send(this.messageBuilder.buildSqlStatement("create table tableInsert (x int, y varchar(20), z decimal(10, 2))"), 0);
    this.protocol.readQueryResult(new StatementExecuteOkBuilder());
    InsertParams insertParams = new InsertParams();
    insertParams.setProjection(new String[] { "z", "x", "y" });
    insertParams.addRow(Arrays.asList("10.2", 40, "some string value"));
    insertParams.addRow(Arrays.asList("10.3", 50, "another string value"));
    this.protocol.send(this.messageBuilder.buildRowInsert(getTestDatabase(), "tableInsert", insertParams), 0);
    SqlResult res = this.protocol.readQueryResult(new SqlResultBuilder(this.protocol.getServerSession().getDefaultTimeZone(), this.protocol.getPropertySet()));
    assertEquals(2, res.getAffectedItemsCount());
    FilterParams filterParams = new TableFilterParams(getTestDatabase(), "tableInsert");
    filterParams.setOrder("x DESC");
    filterParams.setFields("z, y, x");
    this.protocol.send(this.messageBuilder.buildFind(filterParams), 0);
    ColumnDefinition metadata = this.protocol.readMetadata();
    Iterator<Row> ris = new XProtocolRowInputStream(metadata, this.protocol, null);
    Row r = ris.next();
    assertEquals("10.30", r.getValue(0, new StringValueFactory(this.protocol.getPropertySet())));
    assertEquals("another string value", r.getValue(1, new StringValueFactory(this.protocol.getPropertySet())));
    assertEquals("50", r.getValue(2, new StringValueFactory(this.protocol.getPropertySet())));
    r = ris.next();
    assertEquals("10.20", r.getValue(0, new StringValueFactory(this.protocol.getPropertySet())));
    assertEquals("some string value", r.getValue(1, new StringValueFactory(this.protocol.getPropertySet())));
    assertEquals("40", r.getValue(2, new StringValueFactory(this.protocol.getPropertySet())));
    this.protocol.readQueryResult(new StatementExecuteOkBuilder());
    this.protocol.send(this.messageBuilder.buildSqlStatement("drop table tableInsert"), 0);
    this.protocol.readQueryResult(new StatementExecuteOkBuilder());
}
Also used : XProtocolRowInputStream(com.mysql.cj.protocol.x.XProtocolRowInputStream) TableFilterParams(com.mysql.cj.xdevapi.TableFilterParams) SqlResult(com.mysql.cj.xdevapi.SqlResult) StatementExecuteOkBuilder(com.mysql.cj.protocol.x.StatementExecuteOkBuilder) SqlResultBuilder(com.mysql.cj.xdevapi.SqlResultBuilder) StringValueFactory(com.mysql.cj.result.StringValueFactory) DocFilterParams(com.mysql.cj.xdevapi.DocFilterParams) TableFilterParams(com.mysql.cj.xdevapi.TableFilterParams) FilterParams(com.mysql.cj.xdevapi.FilterParams) Row(com.mysql.cj.result.Row) InsertParams(com.mysql.cj.xdevapi.InsertParams) ColumnDefinition(com.mysql.cj.protocol.ColumnDefinition) Test(org.junit.jupiter.api.Test)

Example 2 with FilterParams

use of com.mysql.cj.xdevapi.FilterParams in project aws-mysql-jdbc by awslabs.

the class MysqlxSessionTest method testInterleavedResults.

@Test
public void testInterleavedResults() {
    assumeTrue(this.isSetForXTests, PropertyDefinitions.SYSP_testsuite_url_mysqlx + " must be set to run this test.");
    XMessageBuilder builder = (XMessageBuilder) this.session.<XMessage>getMessageBuilder();
    String collName = "testInterleavedResults";
    try {
        try {
            this.session.query(builder.buildDropCollection(getTestDatabase(), collName), new UpdateResultBuilder<>());
        } catch (XProtocolError e) {
            if (e.getErrorCode() != MysqlErrorNumbers.ER_BAD_TABLE_ERROR) {
                throw e;
            }
        }
        this.session.query(builder.buildCreateCollection(getTestDatabase(), collName), new UpdateResultBuilder<>());
        List<String> stringDocs = new ArrayList<>();
        stringDocs.add("{'_id':'0'}");
        stringDocs.add("{'_id':'1'}");
        stringDocs.add("{'_id':'2'}");
        stringDocs.add("{'_id':'3'}");
        stringDocs.add("{'_id':'4'}");
        stringDocs = stringDocs.stream().map(s -> s.replaceAll("'", "\"")).collect(Collectors.toList());
        this.session.query(builder.buildDocInsert(getTestDatabase(), collName, stringDocs, false), new UpdateResultBuilder<>());
        FilterParams filterParams = new DocFilterParams(getTestDatabase(), collName);
        filterParams.setOrder("$._id");
        DocResult docs1 = this.session.query(((XMessageBuilder) this.session.<XMessage>getMessageBuilder()).buildFind(filterParams), new StreamingDocResultBuilder(this.session));
        DocResult docs2 = this.session.query(((XMessageBuilder) this.session.<XMessage>getMessageBuilder()).buildFind(filterParams), new StreamingDocResultBuilder(this.session));
        DocResult docs3 = this.session.query(((XMessageBuilder) this.session.<XMessage>getMessageBuilder()).buildFind(filterParams), new StreamingDocResultBuilder(this.session));
        DocResult docs4 = this.session.query(((XMessageBuilder) this.session.<XMessage>getMessageBuilder()).buildFind(filterParams), new StreamingDocResultBuilder(this.session));
        DocResult docs5 = this.session.query(((XMessageBuilder) this.session.<XMessage>getMessageBuilder()).buildFind(filterParams), new StreamingDocResultBuilder(this.session));
        assertTrue(docs5.hasNext());
        assertTrue(docs4.hasNext());
        assertTrue(docs3.hasNext());
        assertTrue(docs2.hasNext());
        assertTrue(docs1.hasNext());
        for (int i = 0; i < 5; ++i) {
            assertEquals("{\n\"_id\" : \"" + i + "\"\n}", docs1.next().toFormattedString());
            assertEquals("{\n\"_id\" : \"" + i + "\"\n}", docs2.next().toFormattedString());
            assertEquals("{\n\"_id\" : \"" + i + "\"\n}", docs3.next().toFormattedString());
            assertEquals("{\n\"_id\" : \"" + i + "\"\n}", docs4.next().toFormattedString());
            assertEquals("{\n\"_id\" : \"" + i + "\"\n}", docs5.next().toFormattedString());
        }
        assertFalse(docs5.hasNext());
        assertFalse(docs4.hasNext());
        assertFalse(docs3.hasNext());
        assertFalse(docs2.hasNext());
        assertFalse(docs1.hasNext());
    // let the session be closed with all of these "open"
    } finally {
        try {
            this.session.query(builder.buildDropCollection(getTestDatabase(), collName), new UpdateResultBuilder<>());
        } catch (XProtocolError e) {
            if (e.getErrorCode() != MysqlErrorNumbers.ER_BAD_TABLE_ERROR) {
                throw e;
            }
        }
    }
}
Also used : XMessageBuilder(com.mysql.cj.protocol.x.XMessageBuilder) XMessage(com.mysql.cj.protocol.x.XMessage) XProtocolError(com.mysql.cj.protocol.x.XProtocolError) DocFilterParams(com.mysql.cj.xdevapi.DocFilterParams) FilterParams(com.mysql.cj.xdevapi.FilterParams) ArrayList(java.util.ArrayList) StreamingDocResultBuilder(com.mysql.cj.xdevapi.StreamingDocResultBuilder) DocResult(com.mysql.cj.xdevapi.DocResult) DocFilterParams(com.mysql.cj.xdevapi.DocFilterParams) Test(org.junit.jupiter.api.Test)

Example 3 with FilterParams

use of com.mysql.cj.xdevapi.FilterParams in project aws-mysql-jdbc by awslabs.

the class XProtocolTest method testMultiInsert.

@Test
public void testMultiInsert() {
    assumeTrue(this.isSetForXTests, PropertyDefinitions.SYSP_testsuite_url_mysqlx + " must be set to run this test.");
    try {
        String collName = createTempTestCollection(this.protocol);
        List<String> stringDocs = new ArrayList<>();
        stringDocs.add("{'a': 'A', 'a1': 'A1', '_id': 'a'}");
        stringDocs.add("{'b': 'B', 'b2': 'B2', '_id': 'b'}");
        stringDocs.add("{'c': 'C', 'c3': 'C3', '_id': 'c'}");
        stringDocs = stringDocs.stream().map(s -> s.replaceAll("'", "\"")).collect(Collectors.toList());
        this.protocol.send(this.messageBuilder.buildDocInsert(getTestDatabase(), collName, stringDocs, false), 0);
        this.protocol.readQueryResult(new StatementExecuteOkBuilder());
        FilterParams filterParams = new DocFilterParams(getTestDatabase(), collName);
        filterParams.setOrder("_id");
        this.protocol.send(this.messageBuilder.buildFind(filterParams), 0);
        ColumnDefinition metadata = this.protocol.readMetadata();
        Iterator<Row> ris = new XProtocolRowInputStream(metadata, this.protocol, null);
        Row r = ris.next();
        assertEquals(stringDocs.get(0), r.getValue(0, new StringValueFactory(this.protocol.getPropertySet())));
        r = ris.next();
        assertEquals(stringDocs.get(1), r.getValue(0, new StringValueFactory(this.protocol.getPropertySet())));
        r = ris.next();
        assertEquals(stringDocs.get(2), r.getValue(0, new StringValueFactory(this.protocol.getPropertySet())));
        this.protocol.readQueryResult(new StatementExecuteOkBuilder());
    } finally {
        dropTempTestCollection(this.protocol);
    }
}
Also used : XProtocolRowInputStream(com.mysql.cj.protocol.x.XProtocolRowInputStream) StatementExecuteOkBuilder(com.mysql.cj.protocol.x.StatementExecuteOkBuilder) StringValueFactory(com.mysql.cj.result.StringValueFactory) DocFilterParams(com.mysql.cj.xdevapi.DocFilterParams) TableFilterParams(com.mysql.cj.xdevapi.TableFilterParams) FilterParams(com.mysql.cj.xdevapi.FilterParams) ArrayList(java.util.ArrayList) Row(com.mysql.cj.result.Row) DocFilterParams(com.mysql.cj.xdevapi.DocFilterParams) ColumnDefinition(com.mysql.cj.protocol.ColumnDefinition) Test(org.junit.jupiter.api.Test)

Example 4 with FilterParams

use of com.mysql.cj.xdevapi.FilterParams in project aws-mysql-jdbc by awslabs.

the class XProtocolTest method testBasicCrudInsertFind.

@Test
public void testBasicCrudInsertFind() {
    assumeTrue(this.isSetForXTests, PropertyDefinitions.SYSP_testsuite_url_mysqlx + " must be set to run this test.");
    try {
        String collName = createTempTestCollection(this.protocol);
        String json = "{'_id': '85983efc2a9a11e5b345feff819cdc9f', 'testVal': 1, 'insertedBy': 'Jess'}".replaceAll("'", "\"");
        this.protocol.send(this.messageBuilder.buildDocInsert(getTestDatabase(), collName, Arrays.asList(new String[] { json }), false), 0);
        this.protocol.readQueryResult(new StatementExecuteOkBuilder());
        FilterParams filterParams = new DocFilterParams(getTestDatabase(), collName);
        filterParams.setCriteria("$.testVal = 2-1");
        this.protocol.send(this.messageBuilder.buildFind(filterParams), 0);
        ColumnDefinition metadata = this.protocol.readMetadata();
        Iterator<Row> ris = new XProtocolRowInputStream(metadata, this.protocol, null);
        Row r = ris.next();
        assertEquals(json, r.getValue(0, new StringValueFactory(this.protocol.getPropertySet())));
        this.protocol.readQueryResult(new StatementExecuteOkBuilder());
    } finally {
        dropTempTestCollection(this.protocol);
    }
}
Also used : XProtocolRowInputStream(com.mysql.cj.protocol.x.XProtocolRowInputStream) StatementExecuteOkBuilder(com.mysql.cj.protocol.x.StatementExecuteOkBuilder) StringValueFactory(com.mysql.cj.result.StringValueFactory) DocFilterParams(com.mysql.cj.xdevapi.DocFilterParams) TableFilterParams(com.mysql.cj.xdevapi.TableFilterParams) FilterParams(com.mysql.cj.xdevapi.FilterParams) Row(com.mysql.cj.result.Row) DocFilterParams(com.mysql.cj.xdevapi.DocFilterParams) ColumnDefinition(com.mysql.cj.protocol.ColumnDefinition) Test(org.junit.jupiter.api.Test)

Aggregations

DocFilterParams (com.mysql.cj.xdevapi.DocFilterParams)4 FilterParams (com.mysql.cj.xdevapi.FilterParams)4 Test (org.junit.jupiter.api.Test)4 ColumnDefinition (com.mysql.cj.protocol.ColumnDefinition)3 StatementExecuteOkBuilder (com.mysql.cj.protocol.x.StatementExecuteOkBuilder)3 XProtocolRowInputStream (com.mysql.cj.protocol.x.XProtocolRowInputStream)3 Row (com.mysql.cj.result.Row)3 StringValueFactory (com.mysql.cj.result.StringValueFactory)3 TableFilterParams (com.mysql.cj.xdevapi.TableFilterParams)3 ArrayList (java.util.ArrayList)2 XMessage (com.mysql.cj.protocol.x.XMessage)1 XMessageBuilder (com.mysql.cj.protocol.x.XMessageBuilder)1 XProtocolError (com.mysql.cj.protocol.x.XProtocolError)1 DocResult (com.mysql.cj.xdevapi.DocResult)1 InsertParams (com.mysql.cj.xdevapi.InsertParams)1 SqlResult (com.mysql.cj.xdevapi.SqlResult)1 SqlResultBuilder (com.mysql.cj.xdevapi.SqlResultBuilder)1 StreamingDocResultBuilder (com.mysql.cj.xdevapi.StreamingDocResultBuilder)1