Browse Source

* Enable NULL values in prepared statements

git-svn-id: trunk@24265 -
michael 12 years ago
parent
commit
cebb362c75
1 changed files with 14 additions and 9 deletions
  1. 14 9
      packages/fcl-db/src/sqldb/postgres/pqconnection.pp

+ 14 - 9
packages/fcl-db/src/sqldb/postgres/pqconnection.pp

@@ -632,19 +632,24 @@ begin
       if Assigned(AParams) and (AParams.Count > 0) then
         begin
         s := s + '(';
-        for i := 0 to AParams.Count-1 do if TypeStrings[AParams[i].DataType] <> 'Unknown' then
-          s := s + TypeStrings[AParams[i].DataType] + ','
-        else
-          begin
-          if AParams[i].DataType = ftUnknown then 
-            DatabaseErrorFmt(SUnknownParamFieldType,[AParams[i].Name],self)
-          else 
-            DatabaseErrorFmt(SUnsupportedParameter,[Fieldtypenames[AParams[i].DataType]],self);
-          end;
+        for i := 0 to AParams.Count-1 do
+          if AParams[i].IsNull then
+            s:=s+' unknown ,'
+          else if TypeStrings[AParams[i].DataType] <> 'Unknown' then
+            s := s + TypeStrings[AParams[i].DataType] + ','
+          else
+            begin
+            if AParams[i].DataType = ftUnknown then
+              DatabaseErrorFmt(SUnknownParamFieldType,[AParams[i].Name],self)
+            else
+              DatabaseErrorFmt(SUnsupportedParameter,[Fieldtypenames[AParams[i].DataType]],self);
+            end;
         s[length(s)] := ')';
         buf := AParams.ParseSQL(buf,false,sqEscapeSlash in ConnOptions, sqEscapeRepeat in ConnOptions,psPostgreSQL);
         end;
       s := s + ' as ' + buf;
+      if LogEvent(detPrepare) then
+        Log(detPrepare,S);
       res := PQexec(tr.PGConn,pchar(s));
       CheckResultError(res,nil,SErrPrepareFailed);
       // if statement is INSERT, UPDATE, DELETE with RETURNING clause, then