Пример #1
0
        /// <summary>
        /// Generate the SQL UPDATE that updates a row
        /// </summary>
        /// <returns></returns>
        protected override SqlCommandInfo GenerateUpdateRowString()
        {
            SqlUpdateBuilder update = new SqlUpdateBuilder(Factory.Dialect, Factory)
                .SetTableName(qualifiedTableName)
                .AddColumns(ElementColumnNames, elementColumnIsSettable, ElementType);
            if (hasIdentifier)
            {
                update.AddWhereFragment(new string[] { IdentifierColumnName }, IdentifierType, " = ");
            }
            else if (HasIndex && !indexContainsFormula)
            {
                update.AddWhereFragment(KeyColumnNames, KeyType, " = ")
                    .AddWhereFragment(IndexColumnNames, IndexType, " = ");
            }
            else
            {
                string[] cnames = ArrayHelper.Join(KeyColumnNames, ElementColumnNames, elementColumnIsInPrimaryKey);
                SqlType[] ctypes = ArrayHelper.Join(KeyType.SqlTypes(Factory), ElementType.SqlTypes(Factory), elementColumnIsInPrimaryKey);
                update.AddWhereFragment(cnames, ctypes, " = ");
            }

            if (Factory.Settings.IsCommentsEnabled)
                update.SetComment("update collection row " + Role);

            return update.ToSqlCommandInfo();
        }
        /// <inheritdoc />
        protected override SqlCommandInfo GenerateDeleteRowString(bool[] columnNullness)
        {
            var delete = new SqlDeleteBuilder(Factory.Dialect, Factory);

            delete.SetTableName(qualifiedTableName);

            if (hasIdentifier)
            {
                delete.AddWhereFragment(new[] { IdentifierColumnName }, IdentifierType, " = ");
            }
            else
            {
                var useIndex                = HasIndex && !indexContainsFormula;
                var additionalFilterType    = useIndex ? IndexType : ElementType;
                var additionalFilterColumns = useIndex ? IndexColumnNames : ElementColumnNames;
                var includes                = useIndex ? null : Combine(elementColumnIsInPrimaryKey, columnNullness);

                var cnames = includes == null
                                        ? ArrayHelper.Join(KeyColumnNames, additionalFilterColumns)
                                        : ArrayHelper.Join(KeyColumnNames, additionalFilterColumns, includes);

                var ctypes = includes == null
                                        ? ArrayHelper.Join(KeyType.SqlTypes(Factory), additionalFilterType.SqlTypes(Factory))
                                        : ArrayHelper.Join(KeyType.SqlTypes(Factory), additionalFilterType.SqlTypes(Factory), includes);

                delete.AddWhereFragment(cnames, ctypes, " = ");

                if (columnNullness != null)
                {
                    for (var i = 0; i < columnNullness.Length; i++)
                    {
                        if (columnNullness[i])
                        {
                            continue;
                        }
                        delete.AddWhereFragment($"{additionalFilterColumns[i]} is null");
                    }
                }
            }

            if (Factory.Settings.IsCommentsEnabled)
            {
                delete.SetComment("delete collection row " + Role);
            }

            return(delete.ToSqlCommandInfo());
        }