Пример #1
0
        private void ExtractUniqueAndPrimaryKeyConstraints(Catalog catalog)
        {
            using var command = Connection.CreateCommand(GetExtractUniqueAndPrimaryKeyConstraintsQuery());
            using var reader  = command.ExecuteReader(CommandBehavior.SingleResult);
            var  readerState = new PrimaryKeyReaderState(catalog.DefaultSchema);
            bool readingCompleted;

            do
            {
                readingCompleted = !reader.Read();
                ReadPrimaryKeyColumn(reader, readingCompleted, ref readerState);
            } while (!readingCompleted);
        }
Пример #2
0
        private async Task ExtractUniqueAndPrimaryKeyConstraintsAsync(Catalog catalog, CancellationToken token)
        {
            var command = Connection.CreateCommand(GetExtractUniqueAndPrimaryKeyConstraintsQuery());

            await using (command.ConfigureAwait(false)) {
                var reader = await command.ExecuteReaderAsync(CommandBehavior.SingleResult, token).ConfigureAwait(false);

                await using (reader.ConfigureAwait(false)) {
                    var  readerState = new PrimaryKeyReaderState(catalog.DefaultSchema);
                    bool readingCompleted;
                    do
                    {
                        readingCompleted = !await reader.ReadAsync(token).ConfigureAwait(false);

                        ReadPrimaryKeyColumn(reader, readingCompleted, ref readerState);
                    } while (!readingCompleted);
                }
            }
        }
Пример #3
0
        private static void ReadPrimaryKeyColumn(DbDataReader reader, bool readingCompleted, ref PrimaryKeyReaderState state)
        {
            if (readingCompleted)
            {
                if (state.Columns.Count > 0)
                {
                    CreateIndexBasedConstraint(state.Table, state.ConstraintName, state.ConstraintType, state.Columns);
                }
                return;
            }

            int columnPosition = reader.GetInt16(5);

            if (columnPosition <= state.LastColumnIndex)
            {
                CreateIndexBasedConstraint(state.Table, state.ConstraintName, state.ConstraintType, state.Columns);
                state.Columns.Clear();
            }

            if (state.Columns.Count == 0)
            {
                state.Table          = state.Schema.Tables[reader.GetString(1).Trim()];
                state.ConstraintName = reader.GetString(2).Trim();
                state.ConstraintType = reader.GetString(3).Trim();
            }

            state.Columns.Add(state.Table.TableColumns[reader.GetString(4).Trim()]);
            state.LastColumnIndex = columnPosition;
        }