@Test
 public void testRemoteExecuteQuery() throws Exception {
   CalciteAssert.hr()
       .with(REMOTE_CONNECTION_FACTORY)
       .query("values (1, 'a'), (cast(null as integer), 'b')")
       .returnsUnordered("EXPR$0=1; EXPR$1=a", "EXPR$0=null; EXPR$1=b");
 }
 @Test
 public void testRemoteTypeInfo() throws Exception {
   CalciteAssert.hr()
       .with(REMOTE_CONNECTION_FACTORY)
       .metaData(GET_TYPEINFO)
       .returns(CalciteAssert.checkResultCount(30));
 }
 @Test
 public void testRemoteTableTypes() throws Exception {
   CalciteAssert.hr()
       .with(REMOTE_CONNECTION_FACTORY)
       .metaData(GET_TABLE_TYPES)
       .returns("TABLE_TYPE=TABLE\n" + "TABLE_TYPE=VIEW\n");
 }
 @Test
 public void testRemoteColumns() throws Exception {
   CalciteAssert.hr()
       .with(REMOTE_CONNECTION_FACTORY)
       .metaData(GET_COLUMNS)
       .returns(CalciteAssert.checkResultContains("COLUMN_NAME=EMPNO"));
 }
 @Test
 public void testRemoteCatalogs() throws Exception {
   CalciteAssert.hr()
       .with(REMOTE_CONNECTION_FACTORY)
       .metaData(GET_CATALOGS)
       .returns("TABLE_CAT=null\n");
 }
 @Test
 public void testMetaFunctionsLocal() throws Exception {
   final Connection connection = CalciteAssert.hr().connect();
   assertThat(connection.isClosed(), is(false));
   for (Meta.DatabaseProperty p : Meta.DatabaseProperty.values()) {
     switch (p) {
       case GET_NUMERIC_FUNCTIONS:
         assertThat(connection.getMetaData().getNumericFunctions(), not(equalTo("")));
         break;
       case GET_SYSTEM_FUNCTIONS:
         assertThat(connection.getMetaData().getSystemFunctions(), CoreMatchers.notNullValue());
         break;
       case GET_TIME_DATE_FUNCTIONS:
         assertThat(connection.getMetaData().getTimeDateFunctions(), not(equalTo("")));
         break;
       case GET_S_Q_L_KEYWORDS:
         assertThat(connection.getMetaData().getSQLKeywords(), not(equalTo("")));
         break;
       case GET_STRING_FUNCTIONS:
         assertThat(connection.getMetaData().getStringFunctions(), not(equalTo("")));
         break;
       default:
     }
   }
   connection.close();
   assertThat(connection.isClosed(), is(true));
 }
 public Meta create(List<String> args) {
   try {
     final Connection connection = CalciteAssert.hr().connect();
     return new CalciteMetaImpl((CalciteConnectionImpl) connection);
   } catch (Exception e) {
     throw new RuntimeException(e);
   }
 }
 public Service create(AvaticaConnection connection) {
   try {
     Connection localConnection = CalciteAssert.hr().connect();
     final Meta meta =
         CalciteConnectionImpl.TROJAN.getMeta((CalciteConnectionImpl) localConnection);
     return new LocalJsonService(new LocalService(meta));
   } catch (Exception e) {
     throw new RuntimeException(e);
   }
 }
 @Test
 public void testRemoteSchemas() throws Exception {
   CalciteAssert.hr()
       .with(REMOTE_CONNECTION_FACTORY)
       .metaData(GET_SCHEMAS)
       .returns(
           "TABLE_SCHEM=POST; TABLE_CATALOG=null\n"
               + "TABLE_SCHEM=foodmart; TABLE_CATALOG=null\n"
               + "TABLE_SCHEM=hr; TABLE_CATALOG=null\n"
               + "TABLE_SCHEM=metadata; TABLE_CATALOG=null\n");
 }
  @BeforeClass
  public static void beforeClass() throws Exception {
    localConnection = CalciteAssert.hr().connect();

    // Make sure we pick an ephemeral port for the server
    start =
        Main.start(
            new String[] {Factory.class.getName()},
            0,
            new HandlerFactory() {
              public AvaticaJsonHandler createHandler(Service service) {
                return new AvaticaJsonHandler(service);
              }
            });
    final int port = start.getPort();
    remoteConnection =
        DriverManager.getConnection("jdbc:avatica:remote:url=http://localhost:" + port);
  }