Skip to content

Commit

Permalink
Fixing the endpoint type attribute schema (project-chip#1349)
Browse files Browse the repository at this point in the history
- Getting rid of the endpoint_type_ref from endpoint_type_attribute table since the endpoint type cluster table already has this. Normalizing the schema between endpoint type attribute and endpoint type cluster.
- Updating the schema after changes to endpoint_type_attribute table
- JIRA: ZAPP-1128
  • Loading branch information
brdandu authored Jun 28, 2024
1 parent 0066896 commit 254425f
Show file tree
Hide file tree
Showing 15 changed files with 4,344 additions and 4,528 deletions.
4,278 changes: 2,081 additions & 2,197 deletions docs/zap-schema.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
87 changes: 43 additions & 44 deletions src-electron/db/query-attribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,24 +41,28 @@ async function selectEndpointTypeAttributesByEndpointTypeRefAndClusterRef(
let rows = await dbApi.dbAll(
db,
`
select
ENDPOINT_TYPE_ATTRIBUTE_ID,
ENDPOINT_TYPE_REF,
ENDPOINT_TYPE_CLUSTER_REF AS 'CLUSTER_REF',
ATTRIBUTE_REF,
INCLUDED,
STORAGE_OPTION,
SINGLETON,
BOUNDED,
DEFAULT_VALUE,
INCLUDED_REPORTABLE,
MIN_INTERVAL,
MAX_INTERVAL,
REPORTABLE_CHANGE
from
SELECT
ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_ATTRIBUTE_ID,
ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF,
ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF AS 'CLUSTER_REF',
ENDPOINT_TYPE_ATTRIBUTE.ATTRIBUTE_REF,
ENDPOINT_TYPE_ATTRIBUTE.INCLUDED,
ENDPOINT_TYPE_ATTRIBUTE.STORAGE_OPTION,
ENDPOINT_TYPE_ATTRIBUTE.SINGLETON,
ENDPOINT_TYPE_ATTRIBUTE.BOUNDED,
ENDPOINT_TYPE_ATTRIBUTE.DEFAULT_VALUE,
ENDPOINT_TYPE_ATTRIBUTE.INCLUDED_REPORTABLE,
ENDPOINT_TYPE_ATTRIBUTE.MIN_INTERVAL,
ENDPOINT_TYPE_ATTRIBUTE.MAX_INTERVAL,
ENDPOINT_TYPE_ATTRIBUTE.REPORTABLE_CHANGE
FROM
ENDPOINT_TYPE_ATTRIBUTE
where
ENDPOINT_TYPE_REF = ? and ENDPOINT_TYPE_CLUSTER_REF = ?`,
INNER JOIN
ENDPOINT_TYPE_CLUSTER
ON
ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF = ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_CLUSTER_ID
WHERE
ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF = ? and ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF = ?`,
[endpointTypeRef, endpointTypeClusterRef]
)
return rows.map(dbMapping.map.endpointTypeAttribute)
Expand All @@ -69,21 +73,18 @@ async function selectEndpointTypeAttributesByEndpointTypeRefAndClusterRef(
*
* @export
* @param {*} db
* @param {*} newEndpointTypeRef
* @param {*} newEndpointTypeClusterRef
* @param {*} attribute
* @returns Promise duplicated endpoint type attribute's id.
*/
async function duplicateEndpointTypeAttribute(
db,
newEndpointTypeRef,
newEndpointTypeClusterRef,
attribute
) {
return await dbApi.dbInsert(
db,
`INSERT INTO ENDPOINT_TYPE_ATTRIBUTE (
ENDPOINT_TYPE_REF,
ENDPOINT_TYPE_CLUSTER_REF,
ATTRIBUTE_REF,
INCLUDED,
Expand All @@ -106,11 +107,9 @@ async function duplicateEndpointTypeAttribute(
?,
?,
?,
?,
?
)`,
[
newEndpointTypeRef,
newEndpointTypeClusterRef,
attribute.attributeRef,
attribute.included,
Expand Down Expand Up @@ -269,13 +268,13 @@ async function selectAttributeDetailsFromAllEndpointTypesAndClustersUtil(
CLUSTER
ON ATTRIBUTE.CLUSTER_REF = CLUSTER.CLUSTER_ID
WHERE
ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_REF IN (${endpointTypeIds})
ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF IN (${endpointTypeIds})
AND ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF in (${endpointClusterIds})
AND ATTRIBUTE.MANUFACTURER_CODE IS ` +
(isManufacturingSpecific ? `NOT ` : ``) +
`NULL
AND ENDPOINT_TYPE_ATTRIBUTE.INCLUDED = 1
AND ATTRIBUTE.PACKAGE_REF IN (${dbApi.toInClause(packageIds)})
AND ATTRIBUTE.PACKAGE_REF IN (${dbApi.toInClause(packageIds)})
GROUP BY ATTRIBUTE.NAME
`
)
Expand Down Expand Up @@ -385,7 +384,7 @@ ON
WHERE ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF in (${endpointClusterIds})
AND ENDPOINT_TYPE_ATTRIBUTE.INCLUDED = 1 AND ENDPOINT_TYPE_ATTRIBUTE.BOUNDED !=0
AND ENDPOINT_TYPE_CLUSTER.ENABLED=1
AND ATTRIBUTE.PACKAGE_REF IN (${dbApi.toInClause(packageIds)})
AND ATTRIBUTE.PACKAGE_REF IN (${dbApi.toInClause(packageIds)})
GROUP BY CLUSTER.MANUFACTURER_CODE, CLUSTER.CODE, ATTRIBUTE.MANUFACTURER_CODE, ATTRIBUTE.NAME, ATTRIBUTE.SIDE
`
)
Expand Down Expand Up @@ -469,7 +468,7 @@ async function selectAttributeDetailsFromEnabledClusters(
ENDPOINT_TYPE_ATTRIBUTE.SINGLETON,
ENDPOINT_TYPE_ATTRIBUTE.DEFAULT_VALUE,
CASE
WHEN ATOMIC.IS_STRING=1 THEN
WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand All @@ -482,8 +481,8 @@ async function selectAttributeDetailsFromEnabledClusters(
WHEN CLUSTER.MANUFACTURER_CODE THEN CLUSTER.MANUFACTURER_CODE
ELSE NULL
END) OVER () AS MANUFACTURING_SPECIFIC_ATTRIBUTE_COUNT,
SUM (CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.SINGLETON=1 THEN
CASE WHEN ATOMIC.IS_STRING=1 THEN
SUM (CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.SINGLETON=1 THEN
CASE WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand All @@ -492,26 +491,26 @@ async function selectAttributeDetailsFromEnabledClusters(
ELSE ATOMIC.ATOMIC_SIZE
END
ELSE 0 END) OVER () AS SINGLETON_ATTRIBUTE_SIZE,
SUM (CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.SINGLETON=1 THEN
CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.STORAGE_OPTION='NVM' THEN
SUM (CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.SINGLETON=1 THEN
CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.STORAGE_OPTION='NVM' THEN
1
ELSE
0
END
ELSE 0 END) OVER () AS SINGLETON_TOKENIZED_ATTRIBUTE_SIZE,
SUM (CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.SINGLETON=0 THEN
CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.STORAGE_OPTION='NVM' THEN
SUM (CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.SINGLETON=0 THEN
CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.STORAGE_OPTION='NVM' THEN
1
ELSE
0
END
ELSE 0 END) OVER () AS NON_SINGLETON_TOKENIZED_ATTRIBUTE_SIZE,
SUM (CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.STORAGE_OPTION='NVM' THEN
SUM (CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.STORAGE_OPTION='NVM' THEN
1
ELSE
0
END) OVER () AS TOKENIZED_ATTRIBUTE_SIZE,
MAX(CASE WHEN ATOMIC.IS_STRING=1 THEN
MAX(CASE WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand All @@ -520,7 +519,7 @@ async function selectAttributeDetailsFromEnabledClusters(
ELSE ATOMIC.ATOMIC_SIZE
END) OVER () AS MAX_ATTRIBUTE_SIZE,
MAX(CASE WHEN ENDPOINT_TYPE_ATTRIBUTE.STORAGE_OPTION='NVM' THEN
CASE WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand Down Expand Up @@ -599,7 +598,7 @@ async function selectAttributeBoundDetails(
CLUSTER.MANUFACTURER_CODE AS CLUSTER_MANUFACTURER_CODE,
ENDPOINT_TYPE_ATTRIBUTE.DEFAULT_VALUE AS ATT_VALUE,
CASE
WHEN ATOMIC.IS_STRING=1 THEN
WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand All @@ -622,7 +621,7 @@ async function selectAttributeBoundDetails(
WHERE ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF in (${endpointClusterIds})
AND ENDPOINT_TYPE_CLUSTER.SIDE = ATTRIBUTE.SIDE AND ENDPOINT_TYPE_CLUSTER.ENABLED=1
AND (CASE
WHEN ATOMIC.IS_STRING=1 THEN
WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand All @@ -641,7 +640,7 @@ async function selectAttributeBoundDetails(
CLUSTER.MANUFACTURER_CODE AS CLUSTER_MANUFACTURER_CODE,
ATTRIBUTE.MIN AS ATT_VALUE,
CASE
WHEN ATOMIC.IS_STRING=1 THEN
WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand All @@ -664,7 +663,7 @@ ON ATOMIC.NAME = ATTRIBUTE.TYPE
WHERE ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF in (${endpointClusterIds})
AND ENDPOINT_TYPE_CLUSTER.SIDE = ATTRIBUTE.SIDE AND ENDPOINT_TYPE_CLUSTER.ENABLED=1
AND (CASE
WHEN ATOMIC.IS_STRING=1 THEN
WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand All @@ -683,7 +682,7 @@ UNION
CLUSTER.MANUFACTURER_CODE AS CLUSTER_MANUFACTURER_CODE,
ATTRIBUTE.MAX AS ATT_VALUE,
CASE
WHEN ATOMIC.IS_STRING=1 THEN
WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand All @@ -706,7 +705,7 @@ ON ATOMIC.NAME = ATTRIBUTE.TYPE
WHERE ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF in (${endpointClusterIds})
AND ENDPOINT_TYPE_CLUSTER.SIDE = ATTRIBUTE.SIDE AND ENDPOINT_TYPE_CLUSTER.ENABLED=1
AND (CASE
WHEN ATOMIC.IS_STRING=1 THEN
WHEN ATOMIC.IS_STRING=1 THEN
CASE WHEN ATOMIC.IS_LONG=0 THEN ATTRIBUTE.MAX_LENGTH+1
WHEN ATOMIC.IS_LONG=1 THEN ATTRIBUTE.MAX_LENGTH+2
ELSE ATOMIC.ATOMIC_SIZE
Expand Down Expand Up @@ -1028,7 +1027,7 @@ async function selectTokenAttributesForEndpoint(
WHERE
ENDPOINT_TYPE_CLUSTER.ENABLED = 1
AND
ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_REF = ?
ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF = ?
AND
ENDPOINT_TYPE_ATTRIBUTE.INCLUDED = 1
AND
Expand Down Expand Up @@ -1088,12 +1087,12 @@ ON
ENDPOINT_TYPE_ATTRIBUTE.ATTRIBUTE_REF = ATTRIBUTE.ATTRIBUTE_ID
INNER JOIN
ENDPOINT_TYPE_CLUSTER
ON
ON
ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_CLUSTER_REF = ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_CLUSTER_ID
INNER JOIN
ENDPOINT_TYPE
ON
ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_REF = ENDPOINT_TYPE.ENDPOINT_TYPE_ID
ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF = ENDPOINT_TYPE.ENDPOINT_TYPE_ID
INNER JOIN
ENDPOINT
ON
Expand Down
2 changes: 1 addition & 1 deletion src-electron/db/query-cluster.js
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ async function selectTokenAttributeClustersForEndpoint(
ON
ENDPOINT_TYPE_CLUSTER.CLUSTER_REF = CLUSTER.CLUSTER_ID
WHERE
ENDPOINT_TYPE_ATTRIBUTE.ENDPOINT_TYPE_REF = ?
ENDPOINT_TYPE_CLUSTER.ENDPOINT_TYPE_REF = ?
AND
ENDPOINT_TYPE_ATTRIBUTE.INCLUDED = 1
AND
Expand Down
26 changes: 13 additions & 13 deletions src-electron/db/query-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,6 @@ async function insertOrUpdateAttributeState(
`
INSERT OR IGNORE
INTO ENDPOINT_TYPE_ATTRIBUTE (
ENDPOINT_TYPE_REF,
ENDPOINT_TYPE_CLUSTER_REF,
ATTRIBUTE_REF,
DEFAULT_VALUE,
Expand All @@ -275,14 +274,12 @@ INTO ENDPOINT_TYPE_ATTRIBUTE (
?,
?,
?,
?,
( SELECT IS_SINGLETON FROM CLUSTER WHERE CLUSTER_ID = ? ),
?,
?,
?
)`,
[
endpointTypeId,
cluster.endpointTypeClusterId,
attributeId,
staticAttribute.defaultValue ? staticAttribute.defaultValue : '',
Expand All @@ -300,10 +297,9 @@ INTO ENDPOINT_TYPE_ATTRIBUTE (
let query =
'UPDATE ENDPOINT_TYPE_ATTRIBUTE SET ' +
getAllParamValuePairArrayClauses(paramValuePairArray) +
'WHERE ENDPOINT_TYPE_REF = ? AND ENDPOINT_TYPE_CLUSTER_REF = ? AND ATTRIBUTE_REF = ?'
'WHERE ENDPOINT_TYPE_CLUSTER_REF = ? AND ATTRIBUTE_REF = ?'

await dbApi.dbUpdate(db, query, [
endpointTypeId,
cluster.endpointTypeClusterId,
attributeId,
])
Expand All @@ -316,8 +312,8 @@ SELECT
FROM
ENDPOINT_TYPE_ATTRIBUTE AS ETA
WHERE
ETA.ENDPOINT_TYPE_REF = ? AND ENDPOINT_TYPE_CLUSTER_REF = ? AND ATTRIBUTE_REF = ?`,
[endpointTypeId, cluster.endpointTypeClusterId, attributeId]
ENDPOINT_TYPE_CLUSTER_REF = ? AND ATTRIBUTE_REF = ?`,
[cluster.endpointTypeClusterId, attributeId]
)
return row.ENDPOINT_TYPE_ATTRIBUTE_ID
}
Expand Down Expand Up @@ -1389,7 +1385,11 @@ async function selectEndpointTypeAttributeId(
SELECT
ENDPOINT_TYPE_ATTRIBUTE_ID
FROM
ENDPOINT_TYPE_CLUSTER AS ETC
INNER JOIN
ENDPOINT_TYPE_ATTRIBUTE AS ETA
ON
ETA.ENDPOINT_TYPE_CLUSTER_REF = ETC.ENDPOINT_TYPE_CLUSTER_ID
INNER JOIN
ATTRIBUTE AS A
ON
Expand All @@ -1399,7 +1399,7 @@ INNER JOIN
ON
C.CLUSTER_ID = A.CLUSTER_REF
WHERE
ETA.ENDPOINT_TYPE_REF = ?
ETC.ENDPOINT_TYPE_REF = ?
AND C.PACKAGE_REF = ?
AND C.CODE = ?
AND A.CODE = ?
Expand Down Expand Up @@ -1453,15 +1453,15 @@ SELECT
ETA.MAX_INTERVAL,
ETA.REPORTABLE_CHANGE
FROM
ENDPOINT_TYPE_ATTRIBUTE AS ETA
CLUSTER AS C
JOIN
ENDPOINT_TYPE_CLUSTER AS ETC ON ETA.ENDPOINT_TYPE_CLUSTER_REF = ETC.ENDPOINT_TYPE_CLUSTER_ID
ATTRIBUTE AS A ON A.CLUSTER_REF = C.CLUSTER_ID
JOIN
CLUSTER AS C ON ETC.CLUSTER_REF = C.CLUSTER_ID
ENDPOINT_TYPE_ATTRIBUTE AS ETA ON ETA.ATTRIBUTE_REF = A.ATTRIBUTE_ID
JOIN
ATTRIBUTE AS A ON ETA.ATTRIBUTE_REF = A.ATTRIBUTE_ID
ENDPOINT_TYPE_CLUSTER AS ETC ON ETA.ENDPOINT_TYPE_CLUSTER_REF = ETC.ENDPOINT_TYPE_CLUSTER_ID
JOIN
ENDPOINT_TYPE AS ET ON ETA.ENDPOINT_TYPE_REF = ET.ENDPOINT_TYPE_ID
ENDPOINT_TYPE AS ET ON ETC.ENDPOINT_TYPE_REF = ET.ENDPOINT_TYPE_ID
INNER JOIN
SESSION_PARTITION
ON
Expand Down
4 changes: 2 additions & 2 deletions src-electron/db/query-endpoint.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,13 +228,13 @@ ON
WHERE
(A.CLUSTER_REF = ? OR A.CLUSTER_REF IS NULL)
AND A.SIDE = ?
AND (EA.ENDPOINT_TYPE_REF = ? AND (EA.ENDPOINT_TYPE_CLUSTER_REF =
AND ((EA.ENDPOINT_TYPE_CLUSTER_REF =
(SELECT ENDPOINT_TYPE_CLUSTER_ID
FROM ENDPOINT_TYPE_CLUSTER
WHERE CLUSTER_REF = ? AND SIDE = ? AND ENDPOINT_TYPE_REF = ?) ))
ORDER BY A.MANUFACTURER_CODE, A.CODE
`,
[clusterId, side, endpointTypeId, clusterId, side, endpointTypeId]
[clusterId, side, clusterId, side, endpointTypeId]
)

return rows.map((row) => {
Expand Down
Loading

0 comments on commit 254425f

Please sign in to comment.