Exemple #1
0
        private static void ReadIndexBasedConstraintData(DbDataReader reader, ref IndexBasedConstraintReaderState state,
                                                         bool readingCompleted)
        {
            if (readingCompleted)
            {
                if (state.Columns.Count > 0)
                {
                    CreateIndexBasedConstraint(ref state);
                }
            }
            else
            {
                var columnIndex = ReadInt(reader, 5);
                if (columnIndex <= state.LastColumnIndex)
                {
                    CreateIndexBasedConstraint(ref state);
                    state.Columns.Clear();
                }

                if (state.Columns.Count == 0)
                {
                    var schema = state.Catalog.Schemas[reader.GetString(0)];
                    state.Table          = schema.Tables[reader.GetString(1)];
                    state.ConstraintName = reader.GetString(2);
                    state.ConstraintType = reader.GetString(3);
                }

                state.Columns.Add(state.Table.TableColumns[reader.GetString(4)]);
                state.LastColumnIndex = columnIndex;
            }
        }
Exemple #2
0
        private void ExtractUniqueAndPrimaryKeyConstraints(ExtractionContext context)
        {
            var query = context.PerformReplacements(GetExtractUniqueAndPrimaryKeyConstraintsQuery());

            using var reader = ExecuteReader(query);
            var  state = new IndexBasedConstraintReaderState(context.Catalog);
            bool readingCompleted;

            do
            {
                readingCompleted = !reader.Read();
                ReadIndexBasedConstraintData(reader, ref state, readingCompleted);
            } while (!readingCompleted);
        }
Exemple #3
0
        private static void CreateIndexBasedConstraint(ref IndexBasedConstraintReaderState state)
        {
            switch (state.ConstraintType)
            {
            case "PRIMARY KEY":
                _ = state.Table.CreatePrimaryKey(state.ConstraintName, state.Columns.ToArray());
                return;

            case "UNIQUE":
                _ = state.Table.CreateUniqueConstraint(state.ConstraintName, state.Columns.ToArray());
                return;

            default:
                throw new ArgumentOutOfRangeException(nameof(IndexBasedConstraintReaderState.ConstraintType));
            }
        }
Exemple #4
0
        private async Task ExtractUniqueAndPrimaryKeyConstraintsAsync(ExtractionContext context, CancellationToken token)
        {
            var query  = context.PerformReplacements(GetExtractUniqueAndPrimaryKeyConstraintsQuery());
            var reader = await ExecuteReaderAsync(query, token).ConfigureAwait(false);

            await using (reader.ConfigureAwait(false)) {
                var  state = new IndexBasedConstraintReaderState(context.Catalog);
                bool readingCompleted;
                do
                {
                    readingCompleted = !await reader.ReadAsync(token).ConfigureAwait(false);

                    ReadIndexBasedConstraintData(reader, ref state, readingCompleted);
                } while (!readingCompleted);
            }
        }
Exemple #5
0
        //---- ReadIndexBasedConstraintData
        //   0      constraint_schema,
        //   1      table_name,
        //   2      constraint_name,
        //  3       constraint_type,
        //  4       column_name,
        //  5       ordinal_position
        private static void ReadIndexBasedConstraintData(DbDataReader reader, ref IndexBasedConstraintReaderState state,
                                                         bool readingCompleted)
        {
            if (readingCompleted)
            {
                if (state.Columns.Count > 0)
                {
                    CreateIndexBasedConstraint(ref state);
                }
            }
            else
            {
                var columnIndex = ReadInt(reader, 5);
                if (columnIndex <= state.LastColumnIndex)
                {
                    CreateIndexBasedConstraint(ref state);
                    state.Columns.Clear();
                }

                if (state.Columns.Count == 0)
                {
                    var schemaName = reader.GetString(0);
                    var tableName  = reader.GetString(1);
                    var schema     = state.Catalog.Schemas[schemaName];
                    if (schema == null)
                    {
                        throw new InvalidOperationException($"Schema '{schemaName}' is not found");
                    }

                    state.Table = schema.Tables[tableName];
                    if (state.Table == null)
                    {
                        throw new InvalidOperationException($"Table '{tableName}' is not found in schema '{schemaName}'");
                    }

                    state.ConstraintName = reader.GetString(2);
                    state.ConstraintType = reader.GetString(3);
                }

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