internal static bool Equal(TableFieldInfo a, UnresolvedTableFieldInfo b) { if (a.Name != b.Name) { return(false); } var ha = a.Handler; if (ha.Name != b._handlerName) { return(false); } var ca = ha.Configuration; var cb = b._configuration; if (ca == cb) { return(true); } if (ca == null || cb == null) { return(false); } if (ca.Length != cb.Length) { return(false); } if (BitArrayManipulation.CompareByteArray(ca, ca.Length, cb, cb.Length) != 0) { return(false); } return(true); }
public static RelationVersionInfo LoadUnresolved(AbstractBufferedReader reader, string relationName) { var pkCount = reader.ReadVUInt32(); var primaryKeyFields = new List <TableFieldInfo>((int)pkCount); for (var i = 0u; i < pkCount; i++) { primaryKeyFields.Add(UnresolvedTableFieldInfo.Load(reader, relationName, FieldHandlerOptions.Orderable)); } var skFieldCount = reader.ReadVUInt32(); var secondaryKeyFields = new TableFieldInfo[skFieldCount]; for (var i = 0; i < skFieldCount; i++) { secondaryKeyFields[i] = UnresolvedTableFieldInfo.Load(reader, relationName, FieldHandlerOptions.Orderable); } var skCount = reader.ReadVUInt32(); var secondaryKeys = new Dictionary <uint, SecondaryKeyInfo>((int)skCount); var secondaryKeysNames = new Dictionary <string, uint>((int)skCount); for (var i = 0; i < skCount; i++) { var skIndex = reader.ReadVUInt32(); var info = new SecondaryKeyInfo(); reader.SkipVUInt32(); //unused info.Name = reader.ReadString() !; var cnt = reader.ReadVUInt32(); info.Fields = new List <FieldId>((int)cnt); for (var j = 0; j < cnt; j++) { var fromPrimary = reader.ReadBool(); var index = reader.ReadVUInt32(); info.Fields.Add(new FieldId(fromPrimary, index)); } secondaryKeys.Add(skIndex, info); secondaryKeysNames.Add(info.Name, skIndex); } var fieldCount = reader.ReadVUInt32(); var fieldInfos = new TableFieldInfo[fieldCount]; for (var i = 0; i < fieldCount; i++) { fieldInfos[i] = UnresolvedTableFieldInfo.Load(reader, relationName, FieldHandlerOptions.None); } return(new RelationVersionInfo(primaryKeyFields, secondaryKeys, secondaryKeysNames, secondaryKeyFields, fieldInfos)); }
bool SecondaryIndexHasSameDefinition(IReadOnlyCollection <TableFieldInfo> currFields, IReadOnlyCollection <TableFieldInfo> prevFields) { if (currFields.Count != prevFields.Count) { return(false); } var curr = currFields.GetEnumerator(); var prev = prevFields.GetEnumerator(); while (curr.MoveNext() && prev.MoveNext()) { if (!UnresolvedTableFieldInfo.Equal(curr.Current, prev.Current as UnresolvedTableFieldInfo)) { return(false); } } return(true); }