コード例 #1
0
ファイル: TestTupleBuffer.java プロジェクト: skethire/teiid
 @Test
 public void testLobHandling() throws Exception {
   ElementSymbol x = new ElementSymbol("x"); // $NON-NLS-1$
   x.setType(DataTypeManager.DefaultDataClasses.CLOB);
   List<ElementSymbol> schema = Arrays.asList(x);
   TupleBuffer tb =
       BufferManagerFactory.getStandaloneBufferManager()
           .createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); // $NON-NLS-1$
   tb.setInlineLobs(false);
   ClobType c = new ClobType(new SerialClob(new char[0]));
   TupleBatch batch = new TupleBatch(1, new List[] {Arrays.asList(c)});
   tb.addTupleBatch(batch, false);
   assertNotNull(tb.getLobReference(c.getReferenceStreamId()));
 }
コード例 #2
0
 static OProperty<?> buildPropery(
     String propName, EdmType type, Object value, String invalidCharacterReplacement)
     throws TransformationException, SQLException, IOException {
   if (!(type instanceof EdmSimpleType)) {
     if (type instanceof EdmCollectionType) {
       EdmCollectionType collectionType = (EdmCollectionType) type;
       EdmType componentType = collectionType.getItemType();
       Builder<OObject> b = OCollections.newBuilder(componentType);
       if (value instanceof Array) {
         value = ((Array) value).getArray();
       }
       int length = java.lang.reflect.Array.getLength(value);
       for (int i = 0; i < length; i++) {
         Object o = java.lang.reflect.Array.get(value, i);
         OProperty p = buildPropery("x", componentType, o, invalidCharacterReplacement);
         if (componentType instanceof EdmSimpleType) {
           b.add(OSimpleObjects.create((EdmSimpleType) componentType, p.getValue()));
         } else {
           throw new AssertionError("Multi-dimensional arrays are not yet supported.");
           // b.add((OCollection)p.getValue());
         }
       }
       return OProperties.collection(propName, collectionType, b.build());
     }
     throw new AssertionError("non-simple types are not yet supported");
   }
   EdmSimpleType expectedType = (EdmSimpleType) type;
   if (value == null) {
     return OProperties.null_(propName, expectedType);
   }
   Class<?> sourceType = DataTypeManager.getRuntimeType(value.getClass());
   Class<?> targetType =
       DataTypeManager.getDataTypeClass(
           ODataTypeManager.teiidType(expectedType.getFullyQualifiedTypeName()));
   if (sourceType != targetType) {
     Transform t = DataTypeManager.getTransform(sourceType, targetType);
     if (t == null && BlobType.class == targetType) {
       if (sourceType == ClobType.class) {
         return OProperties.binary(propName, ClobType.getString((Clob) value).getBytes());
       }
       if (sourceType == SQLXML.class) {
         return OProperties.binary(propName, ((SQLXML) value).getString().getBytes());
       }
     }
     value = DataTypeManager.convertToRuntimeType(value, true);
     value = t != null ? t.transform(value, targetType) : value;
     value = replaceInvalidCharacters(expectedType, value, invalidCharacterReplacement);
     if (value instanceof BinaryType) {
       value = ((BinaryType) value).getBytesDirect();
     }
     return OProperties.simple(propName, expectedType, value);
   }
   value = replaceInvalidCharacters(expectedType, value, invalidCharacterReplacement);
   return OProperties.simple(propName, expectedType, value);
 }
コード例 #3
0
ファイル: TestLobManager.java プロジェクト: TSurendhar/teiid
  @Test
  public void testLobPeristence() throws Exception {

    BufferManager buffMgr = BufferManagerFactory.getStandaloneBufferManager();
    FileStore fs = buffMgr.createFileStore("temp");

    ClobType clob =
        new ClobType(
            new ClobImpl(
                new InputStreamFactory() {
                  @Override
                  public InputStream getInputStream() throws IOException {
                    return new ReaderInputStream(
                        new StringReader("Clob contents One"),
                        Charset.forName(Streamable.ENCODING));
                  }
                },
                -1));

    BlobType blob =
        new BlobType(
            new BlobImpl(
                new InputStreamFactory() {
                  @Override
                  public InputStream getInputStream() throws IOException {
                    return new ReaderInputStream(
                        new StringReader("Blob contents Two"),
                        Charset.forName(Streamable.ENCODING));
                  }
                }));

    BlobType blobEmpty =
        new BlobType(
            new BlobImpl(
                new InputStreamFactory() {
                  @Override
                  public InputStream getInputStream() throws IOException {
                    return new ByteArrayInputStream(new byte[0]);
                  }
                }));

    FileStore fs1 = buffMgr.createFileStore("blob");
    FileStoreInputStreamFactory fsisf = new FileStoreInputStreamFactory(fs1, Streamable.ENCODING);
    FileStoreOutputStream fsos = fsisf.getOuputStream();
    byte[] b = new byte[DataTypeManager.MAX_LOB_MEMORY_BYTES + 1];
    fsos.write(b);
    fsos.close();
    BlobType blob1 = new BlobType(new BlobImpl(fsisf));

    assertNotNull(blob1.getReferenceStreamId());

    LobManager lobManager = new LobManager(new int[] {0, 1, 2, 3}, fs);
    lobManager.setMaxMemoryBytes(4);
    List<?> tuple = Arrays.asList(clob, blob, blob1, blobEmpty);
    lobManager.updateReferences(tuple, ReferenceMode.CREATE);

    assertNotNull(blob1.getReferenceStreamId());

    lobManager.persist();

    Streamable<?> lob = lobManager.getLobReference(clob.getReferenceStreamId());
    assertTrue(lob.getClass().isAssignableFrom(ClobType.class));
    ClobType clobRead = (ClobType) lob;
    assertEquals(ClobType.getString(clob), ClobType.getString(clobRead));
    assertTrue(clobRead.length() != -1);

    lob = lobManager.getLobReference(blob.getReferenceStreamId());
    assertTrue(lob.getClass().isAssignableFrom(BlobType.class));
    BlobType blobRead = (BlobType) lob;
    assertTrue(
        Arrays.equals(
            ObjectConverterUtil.convertToByteArray(blob.getBinaryStream()),
            ObjectConverterUtil.convertToByteArray(blobRead.getBinaryStream())));

    lobManager.updateReferences(tuple, ReferenceMode.REMOVE);

    assertEquals(0, lobManager.getLobCount());
  }
コード例 #4
0
 @Override
 protected Object readObject(ObjectInput in) throws IOException, ClassNotFoundException {
   ClobType ct = new ClobType();
   ct.readExternal(in);
   return ct;
 }