예제 #1
0
 public void Apply(CommandBuilder builder)
 {
     _left.Apply(builder);
     builder.Append(" % ");
     _right.Apply(builder);
     builder.Append(_op);
     _value.Apply(builder);
 }
예제 #2
0
        public static string ToSql(this ISqlFragment fragment)
        {
            if (fragment == null)
            {
                return(null);
            }

            var cmd     = new NpgsqlCommand();
            var builder = new CommandBuilder(cmd);

            fragment.Apply(builder);

            return(builder.ToString().Trim());
        }
예제 #3
0
        public void ConfigureCommand(CommandBuilder builder, IMartenSession session)
        {
            var patchParam = builder.AddJsonParameter(_serializer.ToCleanJson(_patch));

            if (_patch.TryGetValue("value", out var document))
            {
                var value = PossiblyPolymorhpic ? _serializer.ToJsonWithTypes(document) : _serializer.ToJson(document);
                var copy  = new Dictionary <string, object>();
                foreach (var item in _patch)
                {
                    copy.Add(item.Key, item.Value);
                }
                copy["value"] = VALUE_LOOKUP;

                var patchJson     = _serializer.ToJson(copy);
                var replacedValue = patchJson.Replace($"\"{VALUE_LOOKUP}\"", value);

                patchParam = builder.AddJsonParameter(replacedValue);
            }

            var versionParam = builder.AddParameter(CombGuidIdGeneration.NewGuid(), NpgsqlDbType.Uuid);

            builder.Append("update ");
            builder.Append(_storage.TableName.QualifiedName);
            builder.Append(" as d set data = ");
            builder.Append(_transform.Identifier.QualifiedName);
            builder.Append("(data, :");
            builder.Append(patchParam.ParameterName);
            builder.Append("), ");
            builder.Append(SchemaConstants.LastModifiedColumn);
            builder.Append(" = (now() at time zone 'utc'), ");
            builder.Append(SchemaConstants.VersionColumn);
            builder.Append(" = :");
            builder.Append(versionParam.ParameterName);

            if (!_fragment.Contains("where"))
            {
                builder.Append(" where ");
            }
            else
            {
                builder.Append(" ");
            }

            _fragment.Apply(builder);

            applyUpdates(builder, _fragment);
        }
예제 #4
0
        private void applyUpdates(CommandBuilder builder, ISqlFragment where)
        {
            var fields = _storage.DuplicatedFields;

            if (!fields.Any())
            {
                return;
            }

            builder.Append(";update ");
            builder.Append(_storage.TableName.QualifiedName);
            builder.Append(" as d set ");

            builder.Append(fields[0].UpdateSqlFragment());
            for (var i = 1; i < fields.Length; i++)
            {
                builder.Append(", ");
                builder.Append(fields[i].UpdateSqlFragment());
            }

            builder.Append(" where ");
            where.Apply(builder);
        }