Search in sources :

Example 1 with SqlResultBuilder

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

the class XProtocolTest method testWarnings.

@Test
public void testWarnings() {
    assumeTrue(this.isSetForXTests, PropertyDefinitions.SYSP_testsuite_url_mysqlx + " must be set to run this test.");
    this.protocol.send(this.messageBuilder.buildSqlStatement("explain select 1"), 0);
    this.protocol.readMetadata();
    this.protocol.drainRows();
    SqlResult res = this.protocol.readQueryResult(new SqlResultBuilder(this.protocol.getServerSession().getDefaultTimeZone(), this.protocol.getPropertySet()));
    Iterable<Warning> iterable = () -> res.getWarnings();
    List<Warning> warnings = StreamSupport.stream(iterable.spliterator(), false).map(w -> new WarningImpl(w)).collect(Collectors.toList());
    assertEquals(1, warnings.size());
    Warning w = warnings.get(0);
    assertEquals(1, w.getLevel());
    assertEquals(1003, w.getCode());
    // this message format might change over time and have to be loosened up
    assertEquals("/* select#1 */ select 1 AS `1`", w.getMessage());
}
Also used : MysqlErrorNumbers(com.mysql.cj.exceptions.MysqlErrorNumbers) BeforeEach(org.junit.jupiter.api.BeforeEach) Arrays(java.util.Arrays) XProtocolRowInputStream(com.mysql.cj.protocol.x.XProtocolRowInputStream) MysqlType(com.mysql.cj.MysqlType) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) Map(java.util.Map) Assumptions.assumeTrue(org.junit.jupiter.api.Assumptions.assumeTrue) BiConsumer(java.util.function.BiConsumer) StreamSupport(java.util.stream.StreamSupport) XServerCapabilities(com.mysql.cj.protocol.x.XServerCapabilities) DocFilterParams(com.mysql.cj.xdevapi.DocFilterParams) SqlResultBuilder(com.mysql.cj.xdevapi.SqlResultBuilder) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) StringValueFactory(com.mysql.cj.result.StringValueFactory) UpdateSpec(com.mysql.cj.xdevapi.UpdateSpec) UpdateType(com.mysql.cj.xdevapi.UpdateType) Warning(com.mysql.cj.xdevapi.Warning) Iterator(java.util.Iterator) ColumnDefinition(com.mysql.cj.protocol.ColumnDefinition) XMessageBuilder(com.mysql.cj.protocol.x.XMessageBuilder) Field(com.mysql.cj.result.Field) InsertParams(com.mysql.cj.xdevapi.InsertParams) IOException(java.io.IOException) TableFilterParams(com.mysql.cj.xdevapi.TableFilterParams) WarningImpl(com.mysql.cj.xdevapi.WarningImpl) Collectors(java.util.stream.Collectors) PropertyDefinitions(com.mysql.cj.conf.PropertyDefinitions) StatementExecuteOkBuilder(com.mysql.cj.protocol.x.StatementExecuteOkBuilder) XProtocolError(com.mysql.cj.protocol.x.XProtocolError) Test(org.junit.jupiter.api.Test) SqlResult(com.mysql.cj.xdevapi.SqlResult) Row(com.mysql.cj.result.Row) List(java.util.List) AfterEach(org.junit.jupiter.api.AfterEach) FilterParams(com.mysql.cj.xdevapi.FilterParams) XProtocol(com.mysql.cj.protocol.x.XProtocol) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Warning(com.mysql.cj.xdevapi.Warning) SqlResult(com.mysql.cj.xdevapi.SqlResult) SqlResultBuilder(com.mysql.cj.xdevapi.SqlResultBuilder) WarningImpl(com.mysql.cj.xdevapi.WarningImpl) Test(org.junit.jupiter.api.Test)

Example 2 with SqlResultBuilder

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

the class XProtocolTest method testEnableDisableNotices.

@Test
public void testEnableDisableNotices() {
    assumeTrue(this.isSetForXTests, PropertyDefinitions.SYSP_testsuite_url_mysqlx + " must be set to run this test.");
    // TODO currently only "warnings" are allowed to be disabled
    this.protocol.send(this.messageBuilder.buildDisableNotices("warnings"), 0);
    this.protocol.readQueryResult(new StatementExecuteOkBuilder());
    this.protocol.send(this.messageBuilder.buildSqlStatement("select CAST('abc' as CHAR(1))"), 0);
    new XProtocolRowInputStream(this.protocol.readMetadata(), this.protocol, null).next();
    SqlResult res = this.protocol.readQueryResult(new SqlResultBuilder(this.protocol.getServerSession().getDefaultTimeZone(), this.protocol.getPropertySet()));
    assertEquals(0, res.getWarningsCount());
    // "produced_message" are already enabled, they're used here to check that multiple parameters are sent correctly
    this.protocol.send(this.messageBuilder.buildEnableNotices("produced_message", "warnings"), 0);
    this.protocol.readQueryResult(new StatementExecuteOkBuilder());
    this.protocol.send(this.messageBuilder.buildSqlStatement("select CAST('abc' as CHAR(1))"), 0);
    new XProtocolRowInputStream(this.protocol.readMetadata(), this.protocol, null).next();
    res = this.protocol.readQueryResult(new SqlResultBuilder(this.protocol.getServerSession().getDefaultTimeZone(), this.protocol.getPropertySet()));
    assertEquals(1, res.getWarningsCount());
}
Also used : XProtocolRowInputStream(com.mysql.cj.protocol.x.XProtocolRowInputStream) SqlResult(com.mysql.cj.xdevapi.SqlResult) StatementExecuteOkBuilder(com.mysql.cj.protocol.x.StatementExecuteOkBuilder) SqlResultBuilder(com.mysql.cj.xdevapi.SqlResultBuilder) Test(org.junit.jupiter.api.Test)

Example 3 with SqlResultBuilder

use of com.mysql.cj.xdevapi.SqlResultBuilder 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 4 with SqlResultBuilder

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

the class XProtocolTest method testSqlDml.

/**
 * Test DML that is executed with <i>StmtExecute</i> and does not return a result set.
 */
@Test
public void testSqlDml() {
    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 mysqlx_sqlDmlTest"), 0);
    assertFalse(this.protocol.hasResults());
    SqlResult res = this.protocol.readQueryResult(new SqlResultBuilder(this.protocol.getServerSession().getDefaultTimeZone(), this.protocol.getPropertySet()));
    assertEquals(0, res.getAffectedItemsCount());
    this.protocol.send(this.messageBuilder.buildSqlStatement("create table mysqlx_sqlDmlTest (w int primary key auto_increment, x int) auto_increment = 7"), 0);
    assertFalse(this.protocol.hasResults());
    res = this.protocol.readQueryResult(new SqlResultBuilder(this.protocol.getServerSession().getDefaultTimeZone(), this.protocol.getPropertySet()));
    assertEquals(0, res.getAffectedItemsCount());
    this.protocol.send(this.messageBuilder.buildSqlStatement("insert into mysqlx_sqlDmlTest (x) values (44),(29)"), 0);
    assertFalse(this.protocol.hasResults());
    res = this.protocol.readQueryResult(new SqlResultBuilder(this.protocol.getServerSession().getDefaultTimeZone(), this.protocol.getPropertySet()));
    assertEquals(2, res.getAffectedItemsCount());
    assertEquals(new Long(7), res.getAutoIncrementValue());
    this.protocol.send(this.messageBuilder.buildSqlStatement("drop table mysqlx_sqlDmlTest"), 0);
    assertFalse(this.protocol.hasResults());
    this.protocol.readQueryResult(new StatementExecuteOkBuilder());
}
Also used : SqlResult(com.mysql.cj.xdevapi.SqlResult) SqlResultBuilder(com.mysql.cj.xdevapi.SqlResultBuilder) StatementExecuteOkBuilder(com.mysql.cj.protocol.x.StatementExecuteOkBuilder) Test(org.junit.jupiter.api.Test)

Aggregations

StatementExecuteOkBuilder (com.mysql.cj.protocol.x.StatementExecuteOkBuilder)4 SqlResult (com.mysql.cj.xdevapi.SqlResult)4 SqlResultBuilder (com.mysql.cj.xdevapi.SqlResultBuilder)4 Test (org.junit.jupiter.api.Test)4 XProtocolRowInputStream (com.mysql.cj.protocol.x.XProtocolRowInputStream)3 ColumnDefinition (com.mysql.cj.protocol.ColumnDefinition)2 Row (com.mysql.cj.result.Row)2 StringValueFactory (com.mysql.cj.result.StringValueFactory)2 DocFilterParams (com.mysql.cj.xdevapi.DocFilterParams)2 FilterParams (com.mysql.cj.xdevapi.FilterParams)2 InsertParams (com.mysql.cj.xdevapi.InsertParams)2 TableFilterParams (com.mysql.cj.xdevapi.TableFilterParams)2 MysqlType (com.mysql.cj.MysqlType)1 PropertyDefinitions (com.mysql.cj.conf.PropertyDefinitions)1 MysqlErrorNumbers (com.mysql.cj.exceptions.MysqlErrorNumbers)1 XMessageBuilder (com.mysql.cj.protocol.x.XMessageBuilder)1 XProtocol (com.mysql.cj.protocol.x.XProtocol)1 XProtocolError (com.mysql.cj.protocol.x.XProtocolError)1 XServerCapabilities (com.mysql.cj.protocol.x.XServerCapabilities)1 Field (com.mysql.cj.result.Field)1