From 8dca997d000c7392f2f8faee638f4e1d8d265927 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Mon, 13 Sep 2021 08:06:43 +0000 Subject: [PATCH] ZMSQL: Fix SELECT DISTINCT query to not require any aggregate function (https://forum.lazarus.freepascal.org/index.php/topic,56155.msg417368.html). Patch by paweld. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8087 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/zmsql/demo/project1/project1.lpi | 17 +++++++------ components/zmsql/demo/project2/project2.lpi | 18 +++++++------ components/zmsql/source/jansql.pas | 28 ++++++++++++++++++--- 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/components/zmsql/demo/project1/project1.lpi b/components/zmsql/demo/project1/project1.lpi index ea11de18d..98665d6d8 100644 --- a/components/zmsql/demo/project1/project1.lpi +++ b/components/zmsql/demo/project1/project1.lpi @@ -1,9 +1,11 @@ - + - + + + @@ -15,15 +17,16 @@ - - + + + - + @@ -55,8 +58,8 @@ - - + + diff --git a/components/zmsql/demo/project2/project2.lpi b/components/zmsql/demo/project2/project2.lpi index fb0563a54..54a3cdea4 100644 --- a/components/zmsql/demo/project2/project2.lpi +++ b/components/zmsql/demo/project2/project2.lpi @@ -1,13 +1,14 @@ - + - + + + <ResourceType Value="res"/> <UseXPManifest Value="True"/> - <Icon Value="0"/> </General> <i18n> <EnableI18N LFM="False"/> @@ -17,15 +18,16 @@ </BuildModes> <PublishOptions> <Version Value="2"/> - <IncludeFileFilter Value="*.(pas|pp|inc|frm|ppr|lrs|ctpr|ctpkg|sh|xml)"/> - <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> </PublishOptions> <RunParams> + <local> + <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Typhon Run Output' -e $(TyphonDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> - <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Typhon Run Output' -e $(TyphonDir)/tools/runwait.sh $(TargetCmdLine)"/> + <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Typhon Run Output' -e $(TyphonDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </Mode0> </Modes> @@ -55,8 +57,8 @@ <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <IsVisibleTab Value="True"/> - <TopLine Value="64"/> - <CursorPos X="3" Y="49"/> + <TopLine Value="61"/> + <CursorPos X="53" Y="78"/> <UsageCount Value="200"/> <Loaded Value="True"/> <LoadedDesigner Value="True"/> diff --git a/components/zmsql/source/jansql.pas b/components/zmsql/source/jansql.pas index 1a27539ad..4560717b9 100644 --- a/components/zmsql/source/jansql.pas +++ b/components/zmsql/source/jansql.pas @@ -565,7 +565,7 @@ var t1,t2,t3:integer; i,c,i3,c3:integer; idx:integer; - bAggregate:boolean; + bAggregate, bGroup:boolean; selectfieldfunctions:array of TTokenOperator; tablecount, outputfieldcount:integer; sqloutput:TjanSQLOutput; @@ -855,7 +855,17 @@ begin matchtables(0); // process any group by clause - if bAggregate and (recordsets[t3].recordcount>1) then + bGroup := bAggregate; + if not bGroup then + begin + for i := 0 to query.FTokens.Count - 1 do + if query.tokens[i]._operator=tosqlGROUP then + begin + bGroup := True; + break; + end + end; + if (bAggregate or bGroup) and (recordsets[t3].recordcount>1) then groupby(recordsets[t3],grouplist); FMatchrecordSet:=t3; @@ -929,7 +939,7 @@ var idx:integer; outputfieldcount:integer; selectfieldfunctions:array of TTokenOperator; - bAggregate:boolean; + bAggregate, bGroup:boolean; sqloutput:TjanSQLOutput; @@ -1145,7 +1155,17 @@ begin FMatchrecordSet:=t3; // process any group by clause - if bAggregate and (recordsets[t3].recordcount>1) then begin + bGroup := bAggregate; + if not bGroup then + begin + for i := 0 to query.FTokens.Count - 1 do + if query.tokens[i]._operator=tosqlGROUP then + begin + bGroup := True; + break; + end + end; + if (bAggregate or bGroup) and (recordsets[t3].recordcount>1) then begin groupby(recordsets[t3],grouplist); end; c3:=recordsets[t3].recordcount;