Ejemplo n.º 1
0
        public void ACSReplacement_SingleKey()
        {
            var acs = UpperACS();

            var key = new BtrieveKey {
                Segments = new List <BtrieveKeyDefinition> {
                    new BtrieveKeyDefinition {
                        Number       = 0,
                        Offset       = 2,
                        Length       = 8,
                        DataType     = EnumKeyDataType.Zstring,
                        Attributes   = EnumKeyAttributeMask.UseExtendedDataType | EnumKeyAttributeMask.NumberedACS,
                        ACS          = acs,
                        Segment      = true,
                        SegmentIndex = 0,
                        NullValue    = 0,
                    }
                }
            };

            var record = new byte[128];

            Array.Fill(record, (byte)0xFF, 0, record.Length);
            // first segment is all spaces i.e. null
            record[2] = (byte)'a';
            record[3] = (byte)'B';
            record[4] = (byte)'t';
            record[5] = (byte)'Z';
            record[6] = (byte)'%';
            record[7] = 0;

            var sqlLiteObject = key.ExtractKeyInRecordToSqliteObject(record);

            sqlLiteObject.Should().Be("ABTZ%");
        }
Ejemplo n.º 2
0
        public void NullValueString(EnumKeyDataType dataType)
        {
            var key = new BtrieveKey {
                Segments = new List <BtrieveKeyDefinition> {
                    new BtrieveKeyDefinition {
                        Number       = 0,
                        Offset       = 2,
                        Length       = 8,
                        DataType     = dataType,
                        Attributes   = EnumKeyAttributeMask.UseExtendedDataType | EnumKeyAttributeMask.NullAllSegments,
                        Segment      = true,
                        SegmentIndex = 0,
                        NullValue    = (byte)' ',
                    }
                }
            };

            var record = new byte[128];

            Array.Fill(record, (byte)0xFF, 0, record.Length);
            // first segment is all spaces i.e. null
            Array.Fill(record, (byte)' ', 2, 8);

            var sqlLiteObject = key.ExtractKeyInRecordToSqliteObject(record);

            sqlLiteObject.Should().Be(DBNull.Value);
        }
Ejemplo n.º 3
0
        private BtrieveFile CreateBtrieveFile()
        {
            var btrieveFile = new BtrieveFile()
            {
                RecordLength = RECORD_LENGTH,
                FileName     = $"{RANDOM.Next() % 100_000_000}.DAT",
                RecordCount  = 3,
            };

            var key = new BtrieveKey();

            key.Segments.Add(new BtrieveKeyDefinition()
            {
                Number     = 0,
                Attributes = EnumKeyAttributeMask.UseExtendedDataType | EnumKeyAttributeMask.Duplicates,
                DataType   = EnumKeyDataType.Zstring,
                Offset     = 0,
                Length     = 32,
                Segment    = false,
            });

            btrieveFile.Keys.Add(0, key);

            btrieveFile.Records.Add(new BtrieveRecord(1, CreateRecord("ABC", 1)));
            btrieveFile.Records.Add(new BtrieveRecord(2, CreateRecord("ABC", 2)));
            btrieveFile.Records.Add(new BtrieveRecord(3, CreateRecord("abc", 3)));
            btrieveFile.Records.Add(new BtrieveRecord(4, CreateRecord("abc", 4)));
            btrieveFile.Records.Add(new BtrieveRecord(5, CreateRecord("test", 5)));
            btrieveFile.Records.Add(new BtrieveRecord(6, CreateRecord("yyz", 6)));

            return(btrieveFile);
        }
Ejemplo n.º 4
0
        public void PositiveIntegerTypeConversion(ushort length, EnumKeyDataType type, object expected)
        {
            var key = new BtrieveKey {
                Segments = new List <BtrieveKeyDefinition> {
                    new BtrieveKeyDefinition {
                        Number       = 0,
                        Offset       = 0,
                        Length       = length,
                        DataType     = type,
                        Attributes   = EnumKeyAttributeMask.UseExtendedDataType,
                        Segment      = false,
                        SegmentIndex = 0,
                        NullValue    = 0,
                    }
                },
            };

            key.KeyDataToSqliteObject(DATA_POSITIVE.AsSpan().Slice(0, length)).Should().Be(expected);
        }
Ejemplo n.º 5
0
        public void CompositeKeyConcatentation()
        {
            var key = new BtrieveKey()
            {
                Segments = new List <BtrieveKeyDefinition>()
                {
                    new BtrieveKeyDefinition()
                    {
                        Number       = 0,
                        Offset       = 2,
                        Length       = 8,
                        DataType     = EnumKeyDataType.Integer,
                        Attributes   = EnumKeyAttributeMask.UseExtendedDataType,
                        Segment      = true,
                        SegmentIndex = 0,
                        NullValue    = 0,
                    },
                    new BtrieveKeyDefinition()
                    {
                        Number       = 0,
                        Offset       = 20,
                        Length       = 4,
                        DataType     = EnumKeyDataType.Zstring,
                        Attributes   = EnumKeyAttributeMask.UseExtendedDataType,
                        Segment      = false,
                        SegmentIndex = 1,
                        NullValue    = 0,
                    }
                }
            };

            var record = new byte[128];

            Array.Fill(record, (byte)0xFF, 0, record.Length);
            // first segment is all 0x5
            Array.Fill(record, (byte)0x5, 2, 8);
            // second segment is just a letter
            Array.Fill(record, (byte)'T', 20, 4);

            var sqlLiteObject = key.ExtractKeyInRecordToSqliteObject(record);

            sqlLiteObject.Should().BeEquivalentTo(new byte[] { 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, (byte)'T', (byte)'T', (byte)'T', (byte)'T' });
        }
Ejemplo n.º 6
0
        public void ACSReplacement_ACSOnlyOnSecondKey(string input, string expected)
        {
            var acs = UpperACS();

            var key = new BtrieveKey()
            {
                Segments = new List <BtrieveKeyDefinition> {
                    new BtrieveKeyDefinition {
                        Number       = 0,
                        Offset       = 2,
                        Length       = 8,
                        DataType     = EnumKeyDataType.Zstring,
                        Attributes   = EnumKeyAttributeMask.UseExtendedDataType,
                        Segment      = true,
                        SegmentIndex = 0,
                        NullValue    = 0,
                    },
                    new BtrieveKeyDefinition {
                        Number       = 0,
                        Offset       = 10,
                        Length       = 8,
                        DataType     = EnumKeyDataType.Zstring,
                        Attributes   = EnumKeyAttributeMask.UseExtendedDataType | EnumKeyAttributeMask.NumberedACS,
                        ACS          = acs,
                        Segment      = false,
                        SegmentIndex = 1,
                        NullValue    = 0,
                    }
                }
            };

            var record = new byte[128];

            Array.Fill(record, (byte)0x0, 0, record.Length);
            Array.Copy(Encoding.ASCII.GetBytes(input), 0, record, 2, input.Length);

            var sqlLiteObject = Encoding.ASCII.GetString((byte[])key.ExtractKeyInRecordToSqliteObject(record)).TrimEnd((char)0);

            sqlLiteObject.Should().Be(expected);
        }