コード例 #1
0
        public TypedExpression GetTypedExpression()
        {
            var itemType  = PgTypesConverter.CreatePgValueTypeFromObjectType(typeof(TValue));
            var arrayType = new KDPgValueTypeArray(itemType, typeof(TValue));

            return(new TypedExpression(GetRawQuery(), arrayType));
        }
コード例 #2
0
    public static WhereBuilder<TModel> Eq<T>(Expression<Func<TModel, T>> field, T value)
    {
      var column = NodeVisitor.EvaluateExpressionToColumn(field.Body);
      var pgValue = PgTypesConverter.ConvertObjectToPgValue(value);

      var right = TypedExpression.FromPgValue(pgValue);

      return new WhereBuilder<TModel>(ExpressionBuilders.Eq(column.TypedExpression, right));
    }
コード例 #3
0
        public static TypedExpression In(TypedExpression left, IEnumerable array)
        {
            RawQuery rq = new RawQuery();

            rq.AppendSurround(left.RawQuery)
            .Append(" = ANY(")
            .Append(PgTypesConverter.ConvertObjectToPgValue(array))
            .Append(")");

            return(new TypedExpression(rq, KDPgValueTypeInstances.Boolean));
        }
コード例 #4
0
        private string RenderSimple(RenderingContext ctx)
        {
            var sb = new StringBuilder();

            ctx.AliasesStack.Push(_aliases);

            foreach (var part in _parts)
            {
                if (part.Text != null)
                {
                    sb.Append(part.Text);
                }

                if (part.Table != null)
                {
                    var alias = ResolvePlaceholder(ctx, part.Table);
                    if (alias != null)
                    {
                        sb.Append(EscapeUtils.QuoteObjectName(alias));
                    }
                    else
                    {
                        sb.Append(EscapeUtils.QuoteTable(part.Table.Table.Name, part.Table.Table.Schema));
                    }
                }

                if (part.Column != null)
                {
                    // if (!ctx.skipExplicitColumnTableNames) {
                    var alias = ResolvePlaceholder(ctx, part.Column.TablePlaceholder);
                    if (alias != null)
                    {
                        sb.Append(EscapeUtils.QuoteObjectName(alias));
                        sb.Append(".");
                    }

                    sb.Append(EscapeUtils.QuoteObjectName(part.Column.Column.Name));
                }

                else if (part.ParamIdx != -1)
                {
                    sb.Append(PgTypesConverter.ConvertToPgString(_parameters[part.ParamIdx]));
                }

                else if (part.RawQuery != null)
                {
                    sb.Append(part.RawQuery.RenderSimple(ctx));
                }
            }

            ctx.AliasesStack.Pop();
            return(sb.ToString());
        }
コード例 #5
0
        public object ParseResult(object[] values)
        {
            var obj = Activator.CreateInstance(Table.ModelType);

            for (var i = 0; i < _columns.Count; i++)
            {
                var col = _columns[i];
                var val = PgTypesConverter.ConvertFromRawSqlValue(col.Type, values[i]);
                col.PropertyInfo.SetValue(obj, val);
            }

            return(obj);
        }
コード例 #6
0
        public UpdateStatementsBuilder <TModel> SetField <TValue>(Expression <Func <TModel, TValue> > field, TValue value)
        {
            var pi       = NodeVisitor.VisitPath(field, null);
            var npgValue = PgTypesConverter.ConvertToPgValue(pi.Expression.Type, value);

            if (pi.JsonPath.Count > 0)
            {
                AddUpdate(pi.Column, src => ExpressionBuilders.JsonSet(src, pi.JsonPath, TypedExpression.FromPgValue(npgValue)));
            }
            else
            {
                AddUpdate(pi.Column, src => TypedExpression.FromPgValue(npgValue));
            }

            return(this);
        }
コード例 #7
0
        public object ParseResult(object[] values)
        {
            object[] constructorParams = new object[Entries.Count];

            int columnIdx = 0;

            for (var i = 0; i < Entries.Count; i++)
            {
                var entry = Entries[i];

                if (entry.MemberPgTable != null)
                {
                    var table = entry.MemberPgTable;

                    var isNull = (bool)PgTypesConverter.ConvertFromRawSqlValue(KDPgValueTypeInstances.Boolean, values[columnIdx++]);
                    if (isNull)
                    {
                        constructorParams[i] = null;

                        columnIdx += table.Columns.Count;
                    }
                    else
                    {
                        var modelObj = Activator.CreateInstance(table.ModelType);

                        foreach (var column in table.Columns)
                        {
                            var val = PgTypesConverter.ConvertFromRawSqlValue(column.Type, values[columnIdx++]);
                            column.PropertyInfo.SetValue(modelObj, val);
                        }

                        constructorParams[i] = modelObj;
                    }
                }
                else if (entry.MemberPgType != null)
                {
                    constructorParams[i] = PgTypesConverter.ConvertFromRawSqlValue(entry.MemberPgType, values[columnIdx++]);
                }
                else
                {
                    throw new Exception();
                }
            }

            return(Activator.CreateInstance(typeof(TModel), constructorParams));
        }
コード例 #8
0
        public object ParseResult(object[] values)
        {
            var obj = Activator.CreateInstance(Table.ModelType);

            var isNull = (bool)PgTypesConverter.ConvertFromRawSqlValue(KDPgValueTypeInstances.Boolean, values[0]);

            if (isNull)
            {
                return(null);
            }

            for (var i = 0; i < _columns.Count; i++)
            {
                var col = _columns[i];
                var val = PgTypesConverter.ConvertFromRawSqlValue(col.Type, values[1 + i]);
                col.PropertyInfo.SetValue(obj, val);
            }

            return(obj);
        }
コード例 #9
0
        public static bool TryInlineShortValue(PgValue pgValue, out string inlined)
        {
            inlined = null;

            object value = pgValue.Value;

            switch (pgValue.Type)
            {
            case KDPgValueTypeEnum _:
                inlined = PgTypesConverter.ConvertToPgString(value);
                return(true);
            }

            switch (value)
            {
            case string s when pgValue.Type == KDPgValueTypeInstances.String && s.Length < 30:
                inlined = PgTypesConverter.ConvertToPgString(s);
                return(true);

            case int v:
                inlined = PgTypesConverter.ConvertToPgString(v);
                return(true);

            case null:
                inlined = "NULL";
                return(true);

            case true:
                inlined = "TRUE";
                return(true);

            case false:
                inlined = "FALSE";
                return(true);
            }

            return(false);
        }
コード例 #10
0
 public static TypedExpression ContainsAny(TypedExpression left, IEnumerable array)
 => ContainsAny(left, TypedExpression.FromPgValue(PgTypesConverter.ConvertObjectToPgValue(array)));
コード例 #11
0
 public object ParseResult(object[] values)
 {
     return(PgTypesConverter.ConvertFromRawSqlValue(_type, values[0]));
 }
コード例 #12
0
ファイル: InsertQuery.cs プロジェクト: KrystianD/KDPgDriver
        public RawQuery GetRawQuery()
        {
            if (IsEmpty)
            {
                return(RawQuery.Create("SELECT 0"));
            }

            RawQuery rq = new RawQuery();

            var columns = _columns.Count == 0 ? AllColumnsWithoutAutoIncrement : _columns;

            rq.Append("INSERT INTO ");

            rq.AppendTableName(Table.Name, Table.Schema);

            rq.Append("(");
            rq.AppendColumnNames(columns.Select(x => x.columnDescriptor.Name));
            if (_idColumn != null)
            {
                if (columns.Count > 0)
                {
                    rq.Append(",");
                }
                rq.AppendColumnName(_idColumn.Name);
            }

            rq.Append(")");

            rq.Append(" VALUES ");

            var first = true;

            foreach (var obj in _objects)
            {
                if (!first)
                {
                    rq.Append(",");
                }
                rq.Append("(");

                for (int i = 0; i < columns.Count; i++)
                {
                    var column = columns[i];

                    if (i > 0)
                    {
                        rq.Append(",");
                    }

                    if (column.subquery == null)
                    {
                        object val      = ModelsRegistry.GetModelValueByColumn(obj, column.columnDescriptor);
                        var    npgValue = PgTypesConverter.ConvertToPgValue(column.columnDescriptor.Type, val);
                        rq.Append(npgValue);
                    }
                    else
                    {
                        rq.AppendSurround(column.subquery.GetRawQuery());
                    }
                }

                if (_idColumn != null)
                {
                    if (columns.Count > 0)
                    {
                        rq.Append(",");
                    }

                    rq.Append(ExpressionBuilders.CurrSeqValueOfTable(_idRefColumn).RawQuery);
                }

                rq.Append(")");
                first = false;
            }

            if (_onInsertConflict == OnInsertConflict.DoNothing)
            {
                rq.Append(" ON CONFLICT DO NOTHING ");
            }

            if (_onInsertConflict == OnInsertConflict.DoUpdate)
            {
                rq.Append(" ON CONFLICT (");

                var fields = new FieldListBuilder <TModel>();
                _onInsertConflictUpdateFields(fields);
                first = true;
                foreach (var column in fields.Fields)
                {
                    if (!first)
                    {
                        rq.Append(", ");
                    }

                    rq.AppendColumnName(column.Name);

                    first = false;
                }

                rq.Append(") DO UPDATE SET ");

                var updateStatementsBuilder = new UpdateStatementsBuilder <TModel>();
                _onInsertConflictUpdate(updateStatementsBuilder);

                first = true;
                foreach (var(column, typedExpression) in updateStatementsBuilder.UpdateParts)
                {
                    if (!first)
                    {
                        rq.Append(", ");
                    }

                    rq.AppendColumnName(column.Name)
                    .Append(" = ")
                    .Append(typedExpression.RawQuery);

                    first = false;
                }
            }

            if (TableModel.PrimaryKey != null)
            {
                rq.Append(" RETURNING ");
                rq.AppendColumnName(TableModel.PrimaryKey.Name);
            }

            rq.Append(";");

            if (_outputVariable != null)
            {
                rq.Append(" SELECT ");
                rq.Append(ExpressionBuilders.SetConfigText(_outputVariable, ExpressionBuilders.LastVal(), true).RawQuery);
            }

            rq.SkipExplicitColumnTableNames();
            return(rq);
        }
コード例 #13
0
 public static TypedExpression Cast(TypedExpression value, Type type) => Cast(value, PgTypesConverter.CreatePgValueTypeFromObjectType(type));
コード例 #14
0
        public static TypedExpression KDPgJsonbRemoveByValue <T>(TypedExpression array, IEnumerable <object> jsonPath, T item, bool firstOnly)
        {
            var pgValue = PgTypesConverter.ConvertObjectToPgValue(item);

            return(KDPgJsonbRemoveByValue(array, jsonPath, TypedExpression.FromPgValue(pgValue), firstOnly));
        }
コード例 #15
0
        public static TypedExpression KDPgJsonbAdd <T>(TypedExpression array, IEnumerable <object> jsonPath, T item)
        {
            var pgValue = PgTypesConverter.ConvertObjectToPgValue(item);

            return(KDPgJsonbAdd(array, jsonPath, TypedExpression.FromPgValue(pgValue)));
        }
コード例 #16
0
        public static TypedExpression ArrayRemoveItem <T>(TypedExpression array, T item)
        {
            var pgValue = PgTypesConverter.ConvertObjectToPgValue(item);

            return(ArrayRemoveItem(array, TypedExpression.FromPgValue(pgValue)));
        }
コード例 #17
0
 public static TypedExpression FromValue(object value)
 {
     return(FromPgValue(PgTypesConverter.ConvertObjectToPgValue(value)));
 }