private IOperation ComposeInputOperation(Process process, AbstractConnection connection)
        {
            if (connection.Schemas && _entity.Schema.Equals(string.Empty))
            {
                _entity.Schema = connection.DefaultSchema;
            }

            if (_entity.HasSqlKeysOverride())
            {
                return(new SqlKeysOverrideOperation(_entity, connection));
            }

            if (!_entity.PrimaryKey.WithInput().Any())
            {
                return(new EmptyOperation());
            }

            if (process.IsFirstRun || !_entity.CanDetectChanges(connection.IsDatabase))
            {
                return(connection.ExtractAllKeysFromInput(_process, _entity));
            }

            var operation = new EntityInputKeysExtractDelta(process, _entity, connection);

            if (operation.NeedsToRun())
            {
                return(operation);
            }

            return(new EmptyOperation());
        }