public Datatype addDatatypeIfNotExists(Datatype datatype) { synchronized (datatypes) { Map<String, Datatype> m = datatypes.get(datatype.getDataverseName()); if (m == null) { m = new HashMap<>(); datatypes.put(datatype.getDataverseName(), m); } if (!m.containsKey(datatype.getDatatypeName())) { return m.put(datatype.getDatatypeName(), datatype); } return null; } }
public Datatype dropDatatype(Datatype datatype) { synchronized (datatypes) { Map<String, Datatype> m = datatypes.get(datatype.getDataverseName()); if (m == null) { return null; } return m.remove(datatype.getDatatypeName()); } }
@Override public void addDatatype(TxnId txnId, Datatype datatype) throws AlgebricksException, RemoteException { try { DatatypeTupleTranslator tupleReaderWriter = tupleTranslatorProvider.getDataTypeTupleTranslator(txnId, this, true); ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(datatype); insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple); } catch (HyracksDataException e) { if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) { throw new AlgebricksException( "A datatype with name '" + datatype.getDatatypeName() + "' already exists.", e); } else { throw new AlgebricksException(e); } } }
@Override public void addDatatype(MetadataTransactionContext ctx, Datatype datatype) throws AlgebricksException { try { metadataNode.addDatatype(ctx.getTxnId(), datatype); } catch (RemoteException e) { throw new MetadataException(ErrorCode.REMOTE_EXCEPTION_WHEN_CALLING_METADATA_NODE, e); } try { ctx.addDatatype( metadataNode.getDatatype(ctx.getTxnId(), datatype.getDataverseName(), datatype.getDatatypeName())); } catch (RemoteException e) { throw new MetadataException(ErrorCode.REMOTE_EXCEPTION_WHEN_CALLING_METADATA_NODE, e); } }
private void writeCollectionType(Datatype instance, AbstractComplexType type, DataOutput out) throws HyracksDataException { AbstractCollectionType listType = (AbstractCollectionType) type; IAType itemType = listType.getItemType(); if (itemType.getTypeTag().isDerivedType()) { handleNestedDerivedType(itemType.getTypeName(), (AbstractComplexType) itemType, instance, instance.getDataverseName(), instance.getDatatypeName()); } aString.setValue(listType.getItemType().getTypeName()); stringSerde.serialize(aString, out); }
@Override public void dropDatatype(TxnId txnId, String dataverseName, String datatypeName) throws AlgebricksException, RemoteException { confirmDatatypeIsUnused(txnId, dataverseName, datatypeName); // Delete the datatype entry, including all it's nested anonymous types. try { ITupleReference searchKey = createTuple(dataverseName, datatypeName); // Searches the index for the tuple to be deleted. Acquires an S // lock on the 'datatype' dataset. ITupleReference tuple = getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey); // Get nested types List<String> nestedTypes = getNestedComplexDatatypeNamesForThisDatatype(txnId, dataverseName, datatypeName); deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple); for (String nestedType : nestedTypes) { Datatype dt = getDatatype(txnId, dataverseName, nestedType); if (dt != null && dt.getIsAnonymous()) { dropDatatype(txnId, dataverseName, dt.getDatatypeName()); } } } catch (HyracksDataException e) { if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) { throw new AlgebricksException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e); } else { throw new AlgebricksException(e); } } }
forceDropDatatype(txnId, dataverseName, dataverseDatatypes.get(i).getDatatypeName());
stringSerde.serialize(aString, tupleBuilder.getDataOutput()); tupleBuilder.addFieldEndOffset(); aString.setValue(dataType.getDatatypeName()); stringSerde.serialize(aString, tupleBuilder.getDataOutput()); tupleBuilder.addFieldEndOffset(); aString.setValue(dataType.getDatatypeName()); stringSerde.serialize(aString, fieldValue.getDataOutput()); recordBuilder.addField(MetadataRecordTypes.DATATYPE_ARECORD_DATATYPENAME_FIELD_INDEX, fieldValue);
datatype.getDataverseName(), datatype.getDatatypeName(), new ARecordType(aRecType.getTypeName(), aRecType.getFieldNames(), aRecType.getFieldTypes(), aRecType.isOpen()), datatype.getIsAnonymous());
instance.getDataverseName(), instance.getDatatypeName());