IDEMPIERE-5434 : Allow to define db view component with DISTINCT (#1505)

https://idempiere.atlassian.net/browse/IDEMPIERE-5434
This commit is contained in:
Nicolas Micoud 2022-09-30 07:52:43 +02:00 committed by GitHub
parent 011ac10a4f
commit 98c9dfc844
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 135 additions and 3 deletions

View File

@ -0,0 +1,46 @@
-- IDEMPIERE-5434
SELECT register_migration_script('202209290713_IDEMPIERE-5434.sql') FROM dual;
SET SQLBLANKLINES ON
SET DEFINE OFF
-- Sep 29, 2022, 7:13:48 AM CEST
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,DefaultValue,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml,AD_InfoWindow_ID) VALUES (215407,0,'Distinct','Select Distinct',200087,'IsDistinct','N',1,'N','N','Y','N','N',0,'N',20,0,0,'Y',TO_TIMESTAMP('2022-09-29 07:13:47','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-09-29 07:13:47','YYYY-MM-DD HH24:MI:SS'),100,202186,'Y','N','D','N','N','N','Y','14b4fad8-0f5d-415e-8c55-e8d2490952ea','Y',0,'N','N','N',200000)
;
-- Sep 29, 2022, 7:13:52 AM CEST
ALTER TABLE AD_ViewComponent ADD IsDistinct CHAR(1) DEFAULT 'N' CHECK (IsDistinct IN ('Y','N')) NOT NULL
;
-- Sep 29, 2022, 7:14:09 AM CEST
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan) VALUES (207286,'Distinct','Select Distinct',200098,215407,'Y',1,150,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2022-09-29 07:14:08','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-09-29 07:14:08','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','ba2ad5f7-84c3-4e71-b78b-186094505a91','Y',130,2,2)
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=90, ColumnSpan=1,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206814
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET IsDisplayed='Y', SeqNo=100, XPosition=6, ColumnSpan=1,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207286
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=110,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202235
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=120,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202234
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=130,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202231
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=140,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202229
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=150,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202232
;

View File

@ -0,0 +1,43 @@
-- IDEMPIERE-5434
SELECT register_migration_script('202209290713_IDEMPIERE-5434.sql') FROM dual;
-- Sep 29, 2022, 7:13:48 AM CEST
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,DefaultValue,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml,AD_InfoWindow_ID) VALUES (215407,0,'Distinct','Select Distinct',200087,'IsDistinct','N',1,'N','N','Y','N','N',0,'N',20,0,0,'Y',TO_TIMESTAMP('2022-09-29 07:13:47','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-09-29 07:13:47','YYYY-MM-DD HH24:MI:SS'),100,202186,'Y','N','D','N','N','N','Y','14b4fad8-0f5d-415e-8c55-e8d2490952ea','Y',0,'N','N','N',200000)
;
-- Sep 29, 2022, 7:13:52 AM CEST
ALTER TABLE AD_ViewComponent ADD COLUMN IsDistinct CHAR(1) DEFAULT 'N' CHECK (IsDistinct IN ('Y','N')) NOT NULL
;
-- Sep 29, 2022, 7:14:09 AM CEST
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan) VALUES (207286,'Distinct','Select Distinct',200098,215407,'Y',1,150,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2022-09-29 07:14:08','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2022-09-29 07:14:08','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','ba2ad5f7-84c3-4e71-b78b-186094505a91','Y',130,2,2)
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=90, ColumnSpan=1,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206814
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET IsDisplayed='Y', SeqNo=100, XPosition=6, ColumnSpan=1,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207286
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=110,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202235
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=120,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202234
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=130,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202231
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=140,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202229
;
-- Sep 29, 2022, 7:14:26 AM CEST
UPDATE AD_Field SET SeqNo=150,Updated=TO_TIMESTAMP('2022-09-29 07:14:26','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202232
;

View File

@ -22,7 +22,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Interface for AD_ViewComponent /** Generated Interface for AD_ViewComponent
* @author iDempiere (generated) * @author iDempiere (generated)
* @version Release 9 * @version Release 10
*/ */
public interface I_AD_ViewComponent public interface I_AD_ViewComponent
{ {
@ -178,6 +178,19 @@ public interface I_AD_ViewComponent
*/ */
public boolean isActive(); public boolean isActive();
/** Column name IsDistinct */
public static final String COLUMNNAME_IsDistinct = "IsDistinct";
/** Set Distinct.
* Select Distinct
*/
public void setIsDistinct (boolean IsDistinct);
/** Get Distinct.
* Select Distinct
*/
public boolean isDistinct();
/** Column name IsUnionAll */ /** Column name IsUnionAll */
public static final String COLUMNNAME_IsUnionAll = "IsUnionAll"; public static final String COLUMNNAME_IsUnionAll = "IsUnionAll";

View File

@ -142,6 +142,9 @@ public class MViewComponent extends X_AD_ViewComponent implements ImmutablePOSup
StringBuilder sb = new StringBuilder("SELECT "); StringBuilder sb = new StringBuilder("SELECT ");
// //
if (isDistinct())
sb.append("DISTINCT ");
for (int i = 0; i < vCols.length; i++) for (int i = 0; i < vCols.length; i++)
{ {
String colName = vCols[i].getColumnName(); String colName = vCols[i].getColumnName();

View File

@ -23,7 +23,7 @@ import org.compiere.util.KeyNamePair;
/** Generated Model for AD_ViewComponent /** Generated Model for AD_ViewComponent
* @author iDempiere (generated) * @author iDempiere (generated)
* @version Release 9 - $Id$ */ * @version Release 10 - $Id$ */
@org.adempiere.base.Model(table="AD_ViewComponent") @org.adempiere.base.Model(table="AD_ViewComponent")
public class X_AD_ViewComponent extends PO implements I_AD_ViewComponent, I_Persistent public class X_AD_ViewComponent extends PO implements I_AD_ViewComponent, I_Persistent
{ {
@ -31,7 +31,7 @@ public class X_AD_ViewComponent extends PO implements I_AD_ViewComponent, I_Pers
/** /**
* *
*/ */
private static final long serialVersionUID = 20220116L; private static final long serialVersionUID = 20220929L;
/** Standard Constructor */ /** Standard Constructor */
public X_AD_ViewComponent (Properties ctx, int AD_ViewComponent_ID, String trxName) public X_AD_ViewComponent (Properties ctx, int AD_ViewComponent_ID, String trxName)
@ -44,6 +44,8 @@ public class X_AD_ViewComponent extends PO implements I_AD_ViewComponent, I_Pers
setEntityType (null); setEntityType (null);
// @SQL=SELECT CASE WHEN '@P|AdempiereSys:N@'='Y' THEN 'D' ELSE get_sysconfig('DEFAULT_ENTITYTYPE','U',0,0) END FROM Dual // @SQL=SELECT CASE WHEN '@P|AdempiereSys:N@'='Y' THEN 'D' ELSE get_sysconfig('DEFAULT_ENTITYTYPE','U',0,0) END FROM Dual
setFromClause (null); setFromClause (null);
setIsDistinct (false);
// N
setIsUnionAll (false); setIsUnionAll (false);
// N // N
setName (null); setName (null);
@ -61,6 +63,8 @@ public class X_AD_ViewComponent extends PO implements I_AD_ViewComponent, I_Pers
setEntityType (null); setEntityType (null);
// @SQL=SELECT CASE WHEN '@P|AdempiereSys:N@'='Y' THEN 'D' ELSE get_sysconfig('DEFAULT_ENTITYTYPE','U',0,0) END FROM Dual // @SQL=SELECT CASE WHEN '@P|AdempiereSys:N@'='Y' THEN 'D' ELSE get_sysconfig('DEFAULT_ENTITYTYPE','U',0,0) END FROM Dual
setFromClause (null); setFromClause (null);
setIsDistinct (false);
// N
setIsUnionAll (false); setIsUnionAll (false);
// N // N
setName (null); setName (null);
@ -226,6 +230,29 @@ public class X_AD_ViewComponent extends PO implements I_AD_ViewComponent, I_Pers
return (String)get_Value(COLUMNNAME_Help); return (String)get_Value(COLUMNNAME_Help);
} }
/** Set Distinct.
@param IsDistinct Select Distinct
*/
public void setIsDistinct (boolean IsDistinct)
{
set_Value (COLUMNNAME_IsDistinct, Boolean.valueOf(IsDistinct));
}
/** Get Distinct.
@return Select Distinct
*/
public boolean isDistinct()
{
Object oo = get_Value(COLUMNNAME_IsDistinct);
if (oo != null)
{
if (oo instanceof Boolean)
return ((Boolean)oo).booleanValue();
return "Y".equals(oo);
}
return false;
}
/** Set Is UNION ALL. /** Set Is UNION ALL.
@param IsUnionAll The component view is UNION ALL @param IsUnionAll The component view is UNION ALL
*/ */