@Override public Array createArray(AvaticaType elementType, Iterable<Object> elements) { final ArrayType array = ColumnMetaData.array(elementType, elementType.name, Rep.ARRAY); final List<ColumnMetaData> types = Collections.singletonList(ColumnMetaData.dummy(array, true)); // Avoid creating a new List if we already have a List List<Object> elementList; if (elements instanceof List) { elementList = (List<Object>) elements; } else { elementList = new ArrayList<>(); for (Object element : elements) { elementList.add(element); } } try (ListIteratorCursor cursor = new ListIteratorCursor(createRowForArrayData(elementList))) { List<Accessor> accessor = cursor.createAccessors(types, Unsafe.localCalendar(), this); assert 1 == accessor.size(); return new ArrayImpl(elementList, (ArrayAccessor) accessor.get(0)); } }
public static void main(String[] args) { final StandaloneServer server = new StandaloneServer(); JCommander jc = new JCommander(server); jc.parse(args); if (server.help) { jc.usage(); Unsafe.systemExit(ExitCodes.USAGE.ordinal()); return; } server.start(); // Try to clean up when the server is stopped. Runtime.getRuntime().addShutdownHook( new Thread(new Runnable() { @Override public void run() { LOG.info("Stopping server"); server.stop(); LOG.info("Server stopped"); } })); try { server.join(); } catch (InterruptedException e) { // Reset interruption Thread.currentThread().interrupt(); // And exit now. return; } }
@Override public Array createArray(AvaticaType elementType, Iterable<Object> elements) { final ArrayType array = ColumnMetaData.array(elementType, elementType.name, Rep.ARRAY); final List<ColumnMetaData> types = Collections.singletonList(ColumnMetaData.dummy(array, true)); // Avoid creating a new List if we already have a List List<Object> elementList; if (elements instanceof List) { elementList = (List<Object>) elements; } else { elementList = new ArrayList<>(); for (Object element : elements) { elementList.add(element); } } try (ListIteratorCursor cursor = new ListIteratorCursor(createRowForArrayData(elementList))) { List<Accessor> accessor = cursor.createAccessors(types, Unsafe.localCalendar(), this); assert 1 == accessor.size(); return new ArrayImpl(elementList, (ArrayAccessor) accessor.get(0)); } }
public static void main(String[] args) { final StandaloneServer server = new StandaloneServer(); JCommander jc = new JCommander(server); jc.parse(args); if (server.help) { jc.usage(); Unsafe.systemExit(ExitCodes.USAGE.ordinal()); return; } server.start(); // Try to clean up when the server is stopped. Runtime.getRuntime().addShutdownHook( new Thread(new Runnable() { @Override public void run() { LOG.info("Stopping server"); server.stop(); LOG.info("Server stopped"); } })); try { server.join(); } catch (InterruptedException e) { // Reset interruption Thread.currentThread().interrupt(); // And exit now. return; } }
@Test public void testArrays() { List<Object> serialObj = Arrays.<Object>asList(1, 2, 3, 4); ArrayImpl.Factory factory = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()); ScalarType scalarType = ColumnMetaData.scalar(Types.INTEGER, "INTEGER", Rep.INTEGER); Array a1 = factory.createArray(scalarType, serialObj); TypedValue tv1 = TypedValue.ofJdbc(Rep.ARRAY, a1, Unsafe.localCalendar()); Object jdbcObj = tv1.toJdbc(Unsafe.localCalendar()); assertTrue("The JDBC object is an " + jdbcObj.getClass(), jdbcObj instanceof Array); Object localObj = tv1.toLocal(); assertTrue("The local object is an " + localObj.getClass(), localObj instanceof List); Common.TypedValue protoTv1 = tv1.toProto(); assertEquals(serialObj.size(), protoTv1.getArrayValueCount()); TypedValue tv1Copy = TypedValue.fromProto(protoTv1); Object jdbcObjCopy = tv1Copy.toJdbc(Unsafe.localCalendar()); assertTrue("The JDBC object is an " + jdbcObjCopy.getClass(), jdbcObjCopy instanceof Array); Object localObjCopy = tv1Copy.toLocal(); assertTrue("The local object is an " + localObjCopy.getClass(), localObjCopy instanceof List); } }
public void start() { if (null != server) { LOG.error("The server was already started"); Unsafe.systemExit(ExitCodes.ALREADY_STARTED.ordinal()); return; } try { JdbcMeta meta = new JdbcMeta(url); LocalService service = new LocalService(meta); // Construct the server this.server = new HttpServer.Builder() .withHandler(service, serialization) .withPort(port) .build(); // Then start it server.start(); LOG.info("Started Avatica server on port {} with serialization {}", server.getPort(), serialization); } catch (Exception e) { LOG.error("Failed to start Avatica server", e); Unsafe.systemExit(ExitCodes.START_FAILED.ordinal()); } }
@Override public void testGetArray(ResultSet resultSet) throws SQLException { ColumnMetaData.ScalarType intType = ColumnMetaData.scalar(Types.INTEGER, "INTEGER", ColumnMetaData.Rep.INTEGER); Array expectedArray = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()).createArray( intType, Arrays.asList(1, 2, 3)); assertTrue(ArrayImpl.equalContents(expectedArray, g.getArray(resultSet))); } }
public void start() { if (null != server) { LOG.error("The server was already started"); Unsafe.systemExit(ExitCodes.ALREADY_STARTED.ordinal()); return; } try { JdbcMeta meta = new JdbcMeta(url); LocalService service = new LocalService(meta); // Construct the server this.server = new HttpServer.Builder() .withHandler(service, serialization) .withPort(port) .build(); // Then start it server.start(); LOG.info("Started Avatica server on port {} with serialization {}", server.getPort(), serialization); } catch (Exception e) { LOG.error("Failed to start Avatica server", e); Unsafe.systemExit(ExitCodes.START_FAILED.ordinal()); } }
@Override public void testGetArray(ResultSet resultSet) throws SQLException { ColumnMetaData.ScalarType intType = ColumnMetaData.scalar(Types.INTEGER, "INTEGER", ColumnMetaData.Rep.INTEGER); Array expectedArray = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()).createArray( intType, Arrays.asList(1, 2, 3)); assertTrue(ArrayImpl.equalContents(expectedArray, g.getArray(resultSet))); } }
@Test public void testArrays() { List<Object> serialObj = Arrays.<Object>asList(1, 2, 3, 4); ArrayImpl.Factory factory = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()); ScalarType scalarType = ColumnMetaData.scalar(Types.INTEGER, "INTEGER", Rep.INTEGER); Array a1 = factory.createArray(scalarType, serialObj); TypedValue tv1 = TypedValue.ofJdbc(Rep.ARRAY, a1, Unsafe.localCalendar()); Object jdbcObj = tv1.toJdbc(Unsafe.localCalendar()); assertTrue("The JDBC object is an " + jdbcObj.getClass(), jdbcObj instanceof Array); Object localObj = tv1.toLocal(); assertTrue("The local object is an " + localObj.getClass(), localObj instanceof List); Common.TypedValue protoTv1 = tv1.toProto(); assertEquals(serialObj.size(), protoTv1.getArrayValueCount()); TypedValue tv1Copy = TypedValue.fromProto(protoTv1); Object jdbcObjCopy = tv1Copy.toJdbc(Unsafe.localCalendar()); assertTrue("The JDBC object is an " + jdbcObjCopy.getClass(), jdbcObjCopy instanceof Array); Object localObjCopy = tv1Copy.toLocal(); assertTrue("The local object is an " + localObjCopy.getClass(), localObjCopy instanceof List); } }
ArrayType arrayType = ColumnMetaData.array(intType, "INTEGER", Rep.INTEGER); ColumnMetaData arrayMetaData = MetaImpl.columnMetaData("MY_ARRAY", 1, arrayType, false); ArrayImpl.Factory factory = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()); Unsafe.localCalendar(), factory); assertEquals(1, accessors.size()); Accessor accessor = accessors.get(0);
ArrayType arrayType = ColumnMetaData.array(intType, "INTEGER", Rep.INTEGER); ColumnMetaData arrayMetaData = MetaImpl.columnMetaData("MY_ARRAY", 1, arrayType, false); ArrayImpl.Factory factory = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()); Unsafe.localCalendar(), factory); assertEquals(1, accessors.size()); Accessor accessor = accessors.get(0);
ArrayType arrayType = ColumnMetaData.array(structType, "OBJECT", Rep.STRUCT); ColumnMetaData arrayMetaData = MetaImpl.columnMetaData("MY_ARRAY", 1, arrayType, false); ArrayImpl.Factory factory = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()); Unsafe.localCalendar(), factory); assertEquals(1, accessors.size()); Accessor accessor = accessors.get(0);
ArrayType arrayType = ColumnMetaData.array(structType, "OBJECT", Rep.STRUCT); ColumnMetaData arrayMetaData = MetaImpl.columnMetaData("MY_ARRAY", 1, arrayType, false); ArrayImpl.Factory factory = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()); Unsafe.localCalendar(), factory); assertEquals(1, accessors.size()); Accessor accessor = accessors.get(0);
Unsafe.localCalendar(), null); assertEquals(1, accessors.size()); Accessor accessor = accessors.get(0);
Unsafe.localCalendar(), null); assertEquals(1, accessors.size()); Accessor accessor = accessors.get(0);
@Test public void testArrayWithOffsets() throws Exception { // Define the struct type we're creating ScalarType intType = ColumnMetaData.scalar(Types.INTEGER, "INTEGER", Rep.INTEGER); ArrayImpl.Factory factory = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()); // Create some arrays from the structs Array array1 = factory.createArray(intType, Arrays.<Object>asList(1, 2)); Array array3 = factory.createArray(intType, Arrays.<Object>asList(4, 5, 6)); Object[] data = (Object[]) array1.getArray(2, 1); assertEquals(1, data.length); assertEquals(2, data[0]); data = (Object[]) array3.getArray(1, 1); assertEquals(1, data.length); assertEquals(4, data[0]); data = (Object[]) array3.getArray(2, 2); assertEquals(2, data.length); assertEquals(5, data[0]); assertEquals(6, data[1]); data = (Object[]) array3.getArray(1, 3); assertEquals(3, data.length); assertEquals(4, data[0]); assertEquals(5, data[1]); assertEquals(6, data[2]); } }
@Test public void testArrayWithOffsets() throws Exception { // Define the struct type we're creating ScalarType intType = ColumnMetaData.scalar(Types.INTEGER, "INTEGER", Rep.INTEGER); ArrayImpl.Factory factory = new ArrayFactoryImpl(Unsafe.localCalendar().getTimeZone()); // Create some arrays from the structs Array array1 = factory.createArray(intType, Arrays.<Object>asList(1, 2)); Array array3 = factory.createArray(intType, Arrays.<Object>asList(4, 5, 6)); Object[] data = (Object[]) array1.getArray(2, 1); assertEquals(1, data.length); assertEquals(2, data[0]); data = (Object[]) array3.getArray(1, 1); assertEquals(1, data.length); assertEquals(4, data[0]); data = (Object[]) array3.getArray(2, 2); assertEquals(2, data.length); assertEquals(5, data[0]); assertEquals(6, data[1]); data = (Object[]) array3.getArray(1, 3); assertEquals(3, data.length); assertEquals(4, data[0]); assertEquals(5, data[1]); assertEquals(6, data[2]); } }