From ded288333356e05aebfbdb878efc8d40ca869ab2 Mon Sep 17 00:00:00 2001 From: John Sun Date: Thu, 22 Apr 2021 11:32:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20pgsql=20=E4=B8=AD=20hstore?= =?UTF-8?q?=20=E4=B8=AD=20value=20=E9=94=99=E8=AF=AF=E8=B5=8B=E5=80=BC?= =?UTF-8?q?=E4=B8=BA=20key=20=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E5=85=81=E8=AE=B8=20value=20=E5=80=BC=E4=B8=BA=20NULL=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 ++++- .../PostgreSQLAdo/PostgreSQLAdo.cs | 23 ++++++++++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 0230a2ae..f20f6a44 100644 --- a/.gitignore +++ b/.gitignore @@ -244,4 +244,8 @@ ModelManifest.xml .paket/paket.exe # FAKE - F# Make -.fake/ \ No newline at end of file +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml \ No newline at end of file diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index 931ad21a..5bf8f97e 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -7,6 +7,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Data.Common; +using System.Linq; using System.Text; using System.Threading; @@ -65,12 +66,22 @@ namespace FreeSql.PostgreSQL { var pgdics = isdic ? param as Dictionary : param as IEnumerable>; - if (pgdics == null) return string.Concat("''::hstore"); - var pghstore = new StringBuilder(); - pghstore.Append("'"); - foreach (var dic in pgdics) - pghstore.Append("\"").Append(dic.Key.Replace("'", "''")).Append("\"=>") - .Append(dic.Key.Replace("'", "''")).Append(","); + + var pghstore = new StringBuilder("'"); + var pairs = pgdics.ToArray(); + + for (var i = 0; i < pairs.Length; i++) + { + if (i != 0) pghstore.Append(","); + + pghstore.AppendFormat("\"{0}\"=>", pairs[i].Key.Replace("'", "''")); + + if (pairs[i].Value == null) + pghstore.Append("NULL"); + else + pghstore.AppendFormat("\"{0}\"", pairs[i].Value.Replace("'", "''")); + } + return pghstore.Append("'::hstore"); } else if (param is IEnumerable)