private void fetchSchemaIfCan(ODatabaseDocumentInternal db) { if (_schema == null) { if (db != null && !db.isClosed()) { OMetadataInternal metadata = db.getMetadata(); _schema = metadata.getImmutableSchemaSnapshot(); } } }
protected void autoConvertFieldsToClass(final ODatabaseDocumentInternal database) { if (_className != null) { OClass klazz = database.getMetadata().getImmutableSchemaSnapshot().getClass(_className); if (klazz != null) convertFieldsToClass(klazz); } }
public static OClass getRecordClassName(final String iValue, OClass iLinkedClass) { // EXTRACT THE CLASS NAME final int classSeparatorPos = OStringParser .indexOfOutsideStrings(iValue, OStringSerializerHelper.CLASS_SEPARATOR.charAt(0), 0, -1); if (classSeparatorPos > -1) { final String className = iValue.substring(0, classSeparatorPos); final ODatabaseDocument database = ODatabaseRecordThreadLocal.instance().get(); if (className != null && database != null) iLinkedClass = ((OMetadataInternal) database.getMetadata()).getImmutableSchemaSnapshot().getClass(className); } return iLinkedClass; }
private OClass getLinkInfo(final ODatabaseInternal<?> iDatabase, final String iFieldClassName) { if (iDatabase == null || iDatabase.isClosed() || iFieldClassName == null) return null; OClass linkedClass = ((OMetadataInternal) iDatabase.getMetadata()).getImmutableSchemaSnapshot().getClass(iFieldClassName); return linkedClass; }
public synchronized void load(final ODatabaseDocumentInternal db) { sequences.clear(); if (db.getMetadata().getImmutableSchemaSnapshot().existsClass(OSequence.CLASS_NAME)) { try (final OResultSet result = db.query("SELECT FROM " + OSequence.CLASS_NAME)) { while (result.hasNext()) { OResult res = result.next(); final OSequence sequence = OSequenceHelper.createSequence((ODocument) res.getElement().get()); sequences.put(sequence.getName().toUpperCase(Locale.ENGLISH), sequence); } } } }
@Deprecated public ORecordIteratorClass(final ODatabaseDocumentInternal iDatabase, final String iClassName, final boolean iPolymorphic, final OStorage.LOCKING_STRATEGY iLockingStrategy) { super(iDatabase, iLockingStrategy); targetClass = ((OMetadataInternal) database.getMetadata()).getImmutableSchemaSnapshot().getClass(iClassName); if (targetClass == null) throw new IllegalArgumentException("Class '" + iClassName + "' was not found in database schema"); polymorphic = iPolymorphic; clusterIds = polymorphic ? targetClass.getPolymorphicClusterIds() : targetClass.getClusterIds(); clusterIds = OClassImpl.readableClusters(iDatabase, clusterIds); checkForSystemClusters(iDatabase, clusterIds); Arrays.sort(clusterIds); config(); }
protected Set<String> getInvolvedClustersOfClasses(final Collection<String> iClassNames) { final ODatabaseDocument db = getDatabase(); final Set<String> clusters = new HashSet<String>(); for (String clazz : iClassNames) { final OClass cls = ((OMetadataInternal) db.getMetadata()).getImmutableSchemaSnapshot().getClass(clazz); if (cls != null) for (int clId : cls.getPolymorphicClusterIds()) { // FILTER THE CLUSTER WHERE THE USER HAS THE RIGHT ACCESS if (clId > -1 && checkClusterAccess(db, db.getClusterNameById(clId))) clusters.add(db.getClusterNameById(clId).toLowerCase(Locale.ENGLISH)); } } return clusters; }
@Override protected void searchInClasses() { final String className = parsedTarget.getTargetClasses().keySet().iterator().next(); final OClass cls = getDatabase().getMetadata().getImmutableSchemaSnapshot().getClass(className); if (!searchForIndexes(cls) && !searchForSubclassIndexes(cls)) { // CHECK FOR INVERSE ORDER final boolean browsingOrderAsc = isBrowsingAscendingOrder(); super.searchInClasses(browsingOrderAsc); } }
private void fetchSchemaIfCan() { if (_schema == null) { ODatabaseDocumentInternal db = ODatabaseRecordThreadLocal.instance().getIfDefined(); if (db != null && !db.isClosed()) { OMetadataInternal metadata = db.getMetadata(); _schema = metadata.getImmutableSchemaSnapshot(); } } }
@Override public Set<String> getInvolvedClusters() { if (className != null) { final OClass clazz = ((OMetadataInternal) getDatabase().getMetadata()).getImmutableSchemaSnapshot().getClass(className); return Collections.singleton(getDatabase().getClusterNameById(clazz.getClusterSelection().getCluster(clazz, null))); } else if (clusterName != null) return getInvolvedClustersOfClusters(Collections.singleton(clusterName)); return Collections.EMPTY_SET; }
protected OGlobalProperty getGlobalPropertyById(int id) { if (_schema == null) { OMetadataInternal metadata = getDatabase().getMetadata(); _schema = metadata.getImmutableSchemaSnapshot(); } OGlobalProperty prop = _schema.getGlobalPropertyById(id); if (prop == null) { ODatabaseDocument db = getDatabase(); if (db == null || db.isClosed()) throw new ODatabaseException( "Cannot unmarshall the document because no database is active, use detach for use the document outside the database session scope"); OMetadataInternal metadata = (OMetadataInternal) db.getMetadata(); if (metadata.getImmutableSchemaSnapshot() != null) metadata.clearThreadLocalSchemaSnapshot(); metadata.reload(); metadata.makeThreadLocalSchemaSnapshot(); _schema = metadata.getImmutableSchemaSnapshot(); prop = _schema.getGlobalPropertyById(id); } return prop; }
protected Set<String> getInvolvedClustersOfIndex(final String iIndexName) { final ODatabaseDocumentInternal db = getDatabase(); final Set<String> clusters = new HashSet<String>(); final OMetadataInternal metadata = (OMetadataInternal) db.getMetadata(); final OIndex<?> idx = metadata.getIndexManager().getIndex(iIndexName); if (idx != null && idx.getDefinition() != null) { final String clazz = idx.getDefinition().getClassName(); if (clazz != null) { final OClass cls = metadata.getImmutableSchemaSnapshot().getClass(clazz); if (cls != null) for (int clId : cls.getClusterIds()) { final String clName = db.getClusterNameById(clId); if (clName != null) clusters.add(clName.toLowerCase(Locale.ENGLISH)); } } } return clusters; }
public void setClassNameIfExists(final String iClassName) { _immutableClazz = null; _immutableSchemaVersion = -1; _className = iClassName; if (iClassName == null) { return; } final ODatabaseDocument db = getDatabaseIfDefined(); if (db != null) { final OClass _clazz = ((OMetadataInternal) db.getMetadata()).getImmutableSchemaSnapshot().getClass(iClassName); if (_clazz != null) { _className = _clazz.getName(); convertFieldsToClass(_clazz); } } }
private static void browseClass(final ODatabaseDocument db, Set<ORID> iSourceRIDs, final Map<ORID, Set<ORID>> map, final String iClassName) { final OClass clazz = ((OMetadataInternal)db.getMetadata()).getImmutableSchemaSnapshot().getClass(iClassName); if (clazz == null) throw new OCommandExecutionException("Class '" + iClassName + "' was not found"); for (int i : clazz.getClusterIds()) { browseCluster(db, iSourceRIDs, map, db.getClusterNameById(i)); } }
private boolean isUsingRestrictedClasses() { boolean restrictedClasses = false; final OSecurityUser user = getDatabase().getUser(); if (parsedTarget.getTargetClasses() != null && user != null && user.checkIfAllowed(ORule.ResourceGeneric.BYPASS_RESTRICTED, null, ORole.PERMISSION_READ) == null) { for (String className : parsedTarget.getTargetClasses().keySet()) { final OClass cls = getDatabase().getMetadata().getImmutableSchemaSnapshot().getClass(className); if (cls.isSubClassOf(OSecurityShared.RESTRICTED_CLASSNAME)) { restrictedClasses = true; break; } } } return restrictedClasses; }
protected OImmutableClass getImmutableSchemaClass(ODatabaseDocumentInternal database) { if (_immutableClazz == null) { if (_className == null) fetchClassName(); if (_className != null) { if (database == null) { database = getDatabaseIfDefined(); } if (database != null && !database.isClosed()) { final OSchema immutableSchema = database.getMetadata().getImmutableSchemaSnapshot(); if (immutableSchema == null) return null; _immutableSchemaVersion = immutableSchema.getVersion(); _immutableClazz = (OImmutableClass) immutableSchema.getClass(_className); } } } return _immutableClazz; }
protected void checkClass(ODatabaseDocumentInternal database) { if (_className == null) fetchClassName(); final OSchema immutableSchema = database.getMetadata().getImmutableSchemaSnapshot(); if (immutableSchema == null) return; if (_immutableClazz == null) { _immutableSchemaVersion = immutableSchema.getVersion(); _immutableClazz = (OImmutableClass) immutableSchema.getClass(_className); } else { if (_immutableSchemaVersion < immutableSchema.getVersion()) { _immutableSchemaVersion = immutableSchema.getVersion(); _immutableClazz = (OImmutableClass) immutableSchema.getClass(_className); } } }
private boolean canScanStorageCluster(final int[] clusterIds) { final ODatabaseDocumentInternal db = getDatabase(); if (clusterIds != null && request.isIdempotent() && !db.getTransaction().isActive()) { final OImmutableSchema schema = ((OMetadataInternal) db.getMetadata()).getImmutableSchemaSnapshot(); for (int clusterId : clusterIds) { final OImmutableClass cls = (OImmutableClass) schema.getClassByClusterId(clusterId); if (cls != null) { if (cls.isRestricted() || cls.isOuser() || cls.isOrole()) return false; } } return true; } return false; }
public ORecordSerializationDebug deserializeDebug(final byte[] iSource, ODatabaseDocumentInternal db) { ORecordSerializationDebug debugInfo = new ORecordSerializationDebug(); OImmutableSchema schema = ((OMetadataInternal) db.getMetadata()).getImmutableSchemaSnapshot(); BytesContainer bytes = new BytesContainer(iSource); int version = readByte(bytes); if (ORecordSerializerBinary.INSTANCE.getSerializer(version).isSerializingClassNameByDefault()) { try { final String className = readString(bytes); debugInfo.className = className; } catch (RuntimeException ex) { debugInfo.readingFailure = true; debugInfo.readingException = ex; debugInfo.failPosition = bytes.offset; return debugInfo; } } ORecordSerializerBinary.INSTANCE.getSerializer(version).deserializeDebug(bytes, db, debugInfo, schema); return debugInfo; }
private void fetchClassName() { final ODatabaseDocumentInternal database = getDatabaseIfDefinedInternal(); if (database != null && database.getStorageVersions() != null) { if (_recordId.getClusterId() < 0) { checkForLoading(); checkForFields(ODocumentHelper.ATTRIBUTE_CLASS); } else { final OSchema schema = database.getMetadata().getImmutableSchemaSnapshot(); if (schema != null) { OClass _clazz = schema.getClassByClusterId(_recordId.getClusterId()); if (_clazz != null) _className = _clazz.getName(); } } } else { // CLASS NOT FOUND: CHECK IF NEED LOADING AND UNMARSHALLING checkForLoading(); checkForFields(ODocumentHelper.ATTRIBUTE_CLASS); } }