internal static void PrepareUpdateAnonSql <T>(this IDbCommand dbCmd, IOrmLiteDialectProvider dialectProvider, object updateOnly, string whereSql)
        {
            var sql      = StringBuilderCache.Allocate();
            var modelDef = typeof(T).GetModelDefinition();
            var fields   = modelDef.FieldDefinitionsArray;

            foreach (var setField in updateOnly.GetType().GetPublicProperties())
            {
                var fieldDef = fields.FirstOrDefault(x => string.Equals(x.Name, setField.Name, StringComparison.OrdinalIgnoreCase));
                if (fieldDef == null || fieldDef.ShouldSkipUpdate())
                {
                    continue;
                }

                var value = setField.CreateGetter()(updateOnly);
                if (string.IsNullOrEmpty(whereSql) && (fieldDef.IsPrimaryKey || fieldDef.AutoIncrement))
                {
                    whereSql = $"WHERE {dialectProvider.GetQuotedColumnName(fieldDef.FieldName)} = {dialectProvider.AddQueryParam(dbCmd, value, fieldDef).ParameterName}";
                    continue;
                }

                if (sql.Length > 0)
                {
                    sql.Append(", ");
                }

                sql
                .Append(dialectProvider.GetQuotedColumnName(fieldDef.FieldName))
                .Append("=")
                .Append(dialectProvider.AddUpdateParam(dbCmd, value, fieldDef).ParameterName);
            }

            dbCmd.CommandText = $"UPDATE {dialectProvider.GetQuotedTableName(modelDef)} " +
                                $"SET {StringBuilderCache.ReturnAndFree(sql)} {whereSql}";
        }
        internal static bool PrepareUpdateAnonSql <T>(this IDbCommand dbCmd, IOrmLiteDialectProvider dialectProvider, object updateOnly, string whereSql)
        {
            var sql      = StringBuilderCache.Allocate();
            var modelDef = typeof(T).GetModelDefinition();
            var fields   = modelDef.FieldDefinitionsArray;

            var fieldDefs = new List <FieldDefinition>();

            if (updateOnly is IDictionary d)
            {
                foreach (DictionaryEntry entry in d)
                {
                    var fieldDef = modelDef.GetFieldDefinition((string)entry.Key);
                    if (fieldDef == null || fieldDef.ShouldSkipUpdate())
                    {
                        continue;
                    }
                    fieldDefs.Add(fieldDef);
                }
            }
            else
            {
                foreach (var setField in updateOnly.GetType().GetPublicProperties())
                {
                    var fieldDef = fields.FirstOrDefault(x =>
                                                         string.Equals(x.Name, setField.Name, StringComparison.OrdinalIgnoreCase));
                    if (fieldDef == null || fieldDef.ShouldSkipUpdate())
                    {
                        continue;
                    }
                    fieldDefs.Add(fieldDef);
                }
            }

            var hadRowVersion = false;

            foreach (var fieldDef in fieldDefs)
            {
                var value = fieldDef.GetValue(updateOnly);
                if (fieldDef.IsPrimaryKey || fieldDef.AutoIncrement || fieldDef.IsRowVersion)
                {
                    if (fieldDef.IsRowVersion)
                    {
                        hadRowVersion = true;
                    }

                    whereSql += string.IsNullOrEmpty(whereSql) ? "WHERE " : " AND ";
                    whereSql += $"{dialectProvider.GetQuotedColumnName(fieldDef.FieldName)} = {dialectProvider.AddQueryParam(dbCmd, value, fieldDef).ParameterName}";
                    continue;
                }

                if (sql.Length > 0)
                {
                    sql.Append(", ");
                }

                sql
                .Append(dialectProvider.GetQuotedColumnName(fieldDef.FieldName))
                .Append("=")
                .Append(dialectProvider.AddUpdateParam(dbCmd, value, fieldDef).ParameterName);
            }

            dbCmd.CommandText = $"UPDATE {dialectProvider.GetQuotedTableName(modelDef)} " +
                                $"SET {StringBuilderCache.ReturnAndFree(sql)} {whereSql}";

            return(hadRowVersion);
        }