GetSequence() public method

public GetSequence ( ObjectName sequenceName ) : ISequence
sequenceName ObjectName
return ISequence
Exemplo n.º 1
0
            public ITable GetTable(int offset)
            {
                var table    = transaction.GetTable(SystemSchema.SequenceInfoTableName);
                int p        = 0;
                int rowIndex = -1;

                foreach (var row in table)
                {
                    var seqType = row.GetValue(3);
                    if (seqType.IsEqualTo(OneValue))
                    {
                        if (p == offset)
                        {
                            rowIndex = row.RowId.RowNumber;
                            break;
                        }

                        p++;
                    }
                }

                if (rowIndex == -1)
                {
                    throw new ArgumentOutOfRangeException("offset");
                }

                var seqId  = table.GetValue(rowIndex, 0);
                var schema = ObjectName.Parse(table.GetValue(rowIndex, 1).Value.ToString());
                var name   = table.GetValue(rowIndex, 2).Value.ToString();

                var tableName = new ObjectName(schema, name);

                // Find this id in the 'sequence' table
                var seqTable = transaction.GetTable(SystemSchema.SequenceTableName);

                var index = seqTable.GetIndex(0);
                var list  = index.SelectEqual(seqId);

                if (!list.Any())
                {
                    throw new Exception("No SEQUENCE table entry for sequence.");
                }

                int seqRowI = list.First();

                // Generate the DataTableInfo
                var tableInfo = CreateTableInfo(schema, name);

                // Last value for this sequence generated by the transaction
                DataObject lastValue;

                try {
                    var sequence = manager.GetSequence(tableName);
                    if (sequence == null)
                    {
                        throw new ObjectNotFoundException(tableName);
                    }

                    lastValue = DataObject.Number(sequence.GetCurrentValue());
                } catch (Exception) {
                    lastValue = DataObject.BigInt(-1);
                }

                // The current value of the sequence generator
                var currentValue = DataObject.Number(manager.GetCurrentValue(tableName));

                // Read the rest of the values from the SEQUENCE table.
                var topValue    = seqTable.GetValue(seqRowI, 1);
                var incrementBy = seqTable.GetValue(seqRowI, 2);
                var minValue    = seqTable.GetValue(seqRowI, 3);
                var maxValue    = seqTable.GetValue(seqRowI, 4);
                var start       = seqTable.GetValue(seqRowI, 5);
                var cache       = seqTable.GetValue(seqRowI, 6);
                var cycle       = seqTable.GetValue(seqRowI, 7);


                return(new SequenceTable(transaction.Database.Context, tableInfo)
                {
                    TopValue = topValue,
                    LastValue = lastValue,
                    CurrentValue = currentValue,
                    Increment = incrementBy,
                    MinValue = minValue,
                    MaxValue = maxValue,
                    Start = start,
                    Cache = cache,
                    Cycle = cycle
                });
            }