@Test
  public void testTypeConversion() throws Exception {
    BufferManager bm = BufferManagerFactory.getStandaloneBufferManager();

    String str = "hello world";

    Object source = new StreamSource(new StringReader(str));
    XMLType xml =
        (XMLType)
            ConnectorWorkItem.convertToRuntimeType(
                bm, source, DataTypeManager.DefaultDataClasses.XML, null);
    assertEquals(str, xml.getString());

    source =
        new StAXSource(XMLType.getXmlInputFactory().createXMLEventReader(new StringReader("<a/>")));
    xml =
        (XMLType)
            ConnectorWorkItem.convertToRuntimeType(
                bm, source, DataTypeManager.DefaultDataClasses.XML, null);
    XMLInputFactory in = XMLType.getXmlInputFactory();
    XMLStreamReader reader = in.createXMLStreamReader(new StringReader(xml.getString()));
    assertEquals(XMLEvent.START_DOCUMENT, reader.getEventType());
    assertEquals(XMLEvent.START_ELEMENT, reader.next());
    assertEquals("a", reader.getLocalName());
    assertEquals(XMLEvent.END_ELEMENT, reader.next());

    byte[] bytes = str.getBytes(Streamable.ENCODING);
    source = new InputStreamFactory.BlobInputStreamFactory(BlobType.createBlob(bytes));
    BlobType blob =
        (BlobType)
            ConnectorWorkItem.convertToRuntimeType(
                bm, source, DataTypeManager.DefaultDataClasses.BLOB, null);

    assertArrayEquals(bytes, ObjectConverterUtil.convertToByteArray(blob.getBinaryStream()));
  }
 private AtomicResultsMessage helpExecuteUpdate(boolean batch, boolean single)
     throws Exception, Throwable {
   Command command =
       helpGetCommand(
           "update bqt1.smalla set stringkey = 1 where stringkey = 2", EXAMPLE_BQT); // $NON-NLS-1$
   if (batch) {
     command = new BatchedUpdateCommand(Arrays.asList(command, command));
   }
   AtomicRequestMessage arm = createNewAtomicRequestMessage(1, 1);
   arm.setCommand(command);
   ConnectorManager connectorManager = TestConnectorManager.getConnectorManager();
   ((FakeConnector) connectorManager.getExecutionFactory()).setReturnSingleUpdate(single);
   ConnectorWorkItem synchConnectorWorkItem = new ConnectorWorkItem(arm, connectorManager);
   synchConnectorWorkItem.execute();
   return synchConnectorWorkItem.more();
 }
  @Test
  public void testUnmodifibleList() throws Exception {
    BufferManager bm = BufferManagerFactory.getStandaloneBufferManager();
    final ExecutionFactory<Object, Object> ef =
        new ExecutionFactory<Object, Object>() {
          @Override
          public boolean isSourceRequired() {
            return false;
          }

          @Override
          public ResultSetExecution createResultSetExecution(
              QueryExpression command,
              ExecutionContext executionContext,
              RuntimeMetadata metadata,
              Object connection)
              throws TranslatorException {
            List<String> list1 = Collections.singletonList("1");
            final Iterator<List<String>> iter = Arrays.asList(list1).iterator();
            return new ResultSetExecution() {

              @Override
              public void execute() throws TranslatorException {}

              @Override
              public void close() {}

              @Override
              public void cancel() throws TranslatorException {}

              @Override
              public List<?> next() throws TranslatorException, DataNotAvailableException {
                if (iter.hasNext()) {
                  return iter.next();
                }
                return null;
              }
            };
          }
        };
    ConnectorManager cm =
        new ConnectorManager("FakeConnector", "FakeConnector") { // $NON-NLS-1$ //$NON-NLS-2$
          public ExecutionFactory getExecutionFactory() {
            return ef;
          }

          public Object getConnectionFactory() {
            return null;
          }
        };
    cm.start();
    AtomicRequestMessage requestMsg = createNewAtomicRequestMessage(1, 1);
    requestMsg.setCommand(
        helpGetCommand("SELECT intkey FROM bqt1.smalla", EXAMPLE_BQT)); // $NON-NLS-1$
    requestMsg.setBufferManager(bm);
    ConnectorWorkItem cwi = new ConnectorWorkItem(requestMsg, cm);
    cwi.execute();
    AtomicResultsMessage message = cwi.more();
    List[] results = message.getResults();
    assertEquals(1, results.length);
    List<?> tuple = results[0];
    assertEquals(1, tuple.get(0));
    assertEquals(1, message.getFinalRow());
  }
  @Test
  public void testLobs() throws Exception {
    BufferManager bm = BufferManagerFactory.getStandaloneBufferManager();
    final ExecutionFactory<Object, Object> ef =
        new ExecutionFactory<Object, Object>() {
          @Override
          public boolean isSourceRequired() {
            return false;
          }

          @Override
          public ResultSetExecution createResultSetExecution(
              QueryExpression command,
              ExecutionContext executionContext,
              RuntimeMetadata metadata,
              Object connection)
              throws TranslatorException {
            return new ResultSetExecution() {

              private boolean returned;

              @Override
              public void execute() throws TranslatorException {}

              @Override
              public void close() {}

              @Override
              public void cancel() throws TranslatorException {}

              @Override
              public List<?> next() throws TranslatorException, DataNotAvailableException {
                if (returned) {
                  return null;
                }
                returned = true;
                return Arrays.asList(AutoGenDataService.CLOB_VAL);
              }
            };
          }
        };
    ConnectorManager cm =
        new ConnectorManager("FakeConnector", "FakeConnector") { // $NON-NLS-1$ //$NON-NLS-2$
          public ExecutionFactory getExecutionFactory() {
            return ef;
          }

          public Object getConnectionFactory() {
            return null;
          }
        };
    cm.start();
    ef.setCopyLobs(true);
    AtomicRequestMessage requestMsg = createNewAtomicRequestMessage(1, 1);
    requestMsg.setCommand(
        helpGetCommand("SELECT CLOB_COLUMN FROM LOB_TESTING_ONE", EXAMPLE_BQT)); // $NON-NLS-1$
    requestMsg.setBufferManager(bm);
    ConnectorWorkItem cwi = new ConnectorWorkItem(requestMsg, cm);
    cwi.execute();
    AtomicResultsMessage message = cwi.more();
    List[] resutls = message.getResults();

    List<?> tuple = resutls[0];
    ClobType clob = (ClobType) tuple.get(0);
    assertEquals(StorageMode.MEMORY, InputStreamFactory.getStorageMode(clob));
    assertTrue(message.supportsImplicitClose());

    ef.setCopyLobs(false);
    cwi = new ConnectorWorkItem(requestMsg, cm);
    cwi.execute();
    message = cwi.more();
    resutls = message.getResults();

    tuple = resutls[0];
    clob = (ClobType) tuple.get(0);
    assertEquals(StorageMode.OTHER, InputStreamFactory.getStorageMode(clob));
    assertFalse(message.supportsImplicitClose());
  }