From 6f0f36b4a7f49cc5f4774b84f69ef90b18e2ed22 Mon Sep 17 00:00:00 2001 From: Johannes Hoermann <j.hoermann@adito.de> Date: Fri, 11 Oct 2019 14:32:12 +0200 Subject: [PATCH] use SqlBuilder in basic --- .../attribute_type/stateProcess.js | 1 + .../recordcontainers/jdito/onInsert.js | 10 - process/Attribute_lib/process.js | 222 +++++++++--------- 3 files changed, 118 insertions(+), 115 deletions(-) diff --git a/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js b/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js index 1ebb324006..e33bb1bcb1 100644 --- a/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js +++ b/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js @@ -1,3 +1,4 @@ +import("system.logging"); import("system.db"); import("system.neon"); import("system.result"); diff --git a/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js b/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js index 841267137b..5f2bbf6be7 100644 --- a/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js +++ b/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js @@ -1,12 +1,9 @@ -import("system.logging"); import("Contact_lib"); import("system.util"); import("ObjectRelation_lib"); import("system.vars"); import("system.db"); -logging.log(JSON.stringify(["hasdf"], null, "\t")) - selectedObjectRelationTypeId = vars.get("$field.OBJECTRELATIONTYPEID"); if (selectedObjectRelationTypeId) { @@ -32,13 +29,6 @@ if (selectedObjectRelationTypeId) objectId1 = vars.get("$field.PARENT_ID"); objectId2 = vars.get("$field.TARGET_ID"); } - - logging.log(JSON.stringify([side, - vars.get("$field.TARGET_ID"), - vars.get("$field.PARENT_ID"), - objectId1, - objectId2 - ], null, "\t")) db.insertData("AB_OBJECTRELATION", [ "AB_OBJECTRELATIONID", diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index 8172a5948b..a05e631dba 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -1,3 +1,4 @@ +import("system.logging"); import("Employee_lib"); import("KeywordData_lib"); import("Context_lib"); @@ -129,15 +130,17 @@ AttributeUtil.getPossibleListValues = function (pAttributeId, pAttributeType, pI var onlyActives = (pIncludeInactives == undefined ? false : pIncludeInactives); if (attrType == $AttributeTypes.COMBO.toString()) { - var valueSql = SqlCondition.begin() - .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", attributeId) - .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE); - + var valuesSelect = newSelect("AB_ATTRIBUTEID, ATTRIBUTE_NAME") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", attributeId) + .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE); + if (onlyActives) - valueSql.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", "1"); + valuesSelect.and("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", "1"); - valueSql = valueSql.buildSql("select AB_ATTRIBUTEID, ATTRIBUTE_NAME from AB_ATTRIBUTE", "1=2", "order by SORTING asc"); - var valueList = db.table(valueSql); + var valueList = valuesSelect.orderBy("SORTING asc") + .table(); + for (let i = 0; i < valueList.length; i++) { valueList[i][1] = translate.text(valueList[i][1]); @@ -153,20 +156,20 @@ AttributeUtil.getPossibleListValues = function (pAttributeId, pAttributeType, pI } else if (attrType == $AttributeTypes.KEYWORD.toString()) { - var attrKeywordSelect = "select DROPDOWNDEFINITION from AB_ATTRIBUTE"; - attrKeywordSelect = SqlCondition.begin() - .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeId) - .buildSql(attrKeywordSelect); - var attrKeyword = db.cell(attrKeywordSelect); + var attrKeyword = newSelect("DROPDOWNDEFINITION") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeId) + .cell(); + var keywords = KeywordData.getSimpleData(attrKeyword, null, onlyActives); return keywords; } else if (attrType == $AttributeTypes.OBJECTSELECTION) { - var [module, filter] = db.array(db.ROW, SqlCondition.begin() - .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeId) - .buildSql("select DROPDOWNDEFINITION, DROPDOWNFILTER from AB_ATTRIBUTE") - ); + var [module, filter] = newSelect("DROPDOWNDEFINITION, DROPDOWNFILTER") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeId) + .arrayRow(); var objects = []; if (module) { @@ -217,13 +220,12 @@ AttributeUtil.getFullAttributeName = function (pAttributeId, pSimpleName, pTrans var attributeNames = []; var attribute; do { - attribute = db.array(db.ROW, SqlCondition.begin() - .andPrepare(["AB_ATTRIBUTE", "AB_ATTRIBUTEID", "ATTRIBUTE"], pAttributeId) - .buildSql("select ATTRIBUTE.ATTRIBUTE_NAME, PARENT1.ATTRIBUTE_NAME, PARENT2.ATTRIBUTE_NAME, PARENT2.ATTRIBUTE_PARENT_ID \n\ - from AB_ATTRIBUTE ATTRIBUTE \n\ - left join AB_ATTRIBUTE PARENT1 on ATTRIBUTE.ATTRIBUTE_PARENT_ID = PARENT1.AB_ATTRIBUTEID \n\ - left join AB_ATTRIBUTE PARENT2 on PARENT1.ATTRIBUTE_PARENT_ID = PARENT2.AB_ATTRIBUTEID") - ); + attribute = newSelect("ATTRIBUTE.ATTRIBUTE_NAME, PARENT1.ATTRIBUTE_NAME, PARENT2.ATTRIBUTE_NAME, PARENT2.ATTRIBUTE_PARENT_ID") + .from("AB_ATTRIBUTE ATTRIBUTE") + .leftJoin("AB_ATTRIBUTE PARENT1", "ATTRIBUTE.ATTRIBUTE_PARENT_ID = PARENT1.AB_ATTRIBUTEID") + .leftJoin("AB_ATTRIBUTE PARENT2", "PARENT1.ATTRIBUTE_PARENT_ID = PARENT2.AB_ATTRIBUTEID") + .where(["AB_ATTRIBUTE", "AB_ATTRIBUTEID", "ATTRIBUTE"], pAttributeId) + if (attribute.length > 0) { attributeNames.push(attribute[0]); @@ -257,10 +259,10 @@ AttributeUtil.getFullAttributeName = function (pAttributeId, pSimpleName, pTrans */ AttributeUtil.getSimpleAttributeName = function (pAttributeId, pTranslate) { - var attributeName = db.cell(SqlCondition.begin() - .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId) - .buildSql("select ATTRIBUTE_NAME from AB_ATTRIBUTE") - ); + var attributeName = newSelect("ATTRIBUTE_NAME") + .from("AB_ATTRIBUTE") + .whereIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId) + .cell(true, ""); if (pTranslate) attributeName = translate.text(attributeName); return attributeName; @@ -281,10 +283,11 @@ AttributeUtil.getAllChildren = function (pAttributeIds) while (pAttributeIds.length > 0) { - pAttributeIds = db.array(db.COLUMN, SqlCondition.begin() - .andIn("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pAttributeIds) - .buildSql("select AB_ATTRIBUTEID from AB_ATTRIBUTE") - ); + pAttributeIds = newSelect("AB_ATTRIBUTEID") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pAttributeIds, SqlBuilder.IN()) + .arrayColumn(); + if (pAttributeIds.length > 0) childIds = childIds.concat(pAttributeIds); } @@ -302,12 +305,10 @@ AttributeUtil.hasRelations = function (pAttributeId) { if (!pAttributeId) return false; - return db.cell(SqlCondition.begin() - .andPrepare("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId) - .buildSql( - "select count(*) from AB_ATTRIBUTERELATION", "1=2" //TODO: is there a way exists could be used? - ) - ) != "0"; + return newSelect("count(*)") + .from("AB_ATTRIBUTERELATION") + .where("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId) + .cell() != "0"; //TODO: is there a way exists could be used? } /** @@ -321,27 +322,26 @@ AttributeUtil.getAttributeType = function (pAttributeId) { if (!pAttributeId) return ""; - var attrTypeSelect = "select ATTRIBUTE_TYPE from AB_ATTRIBUTE"; - attrTypeSelect = SqlCondition.begin() - .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId) - .buildSql(attrTypeSelect); - return db.cell(attrTypeSelect).trim(); + + return newSelect("ATTRIBUTE_TYPE") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId) + .cell() + .trim(); } AttributeUtil.hasAttributes = function (pObjectType) { if (!pObjectType) return false; - return db.cell(SqlCondition.begin() - .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType) - .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", "1") - .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# != ?") - .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.GROUP, "# != ?") - .buildSql( - "select count(*) from AB_ATTRIBUTEUSAGE \n\ - join AB_ATTRIBUTE on AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID", "1=2" - ) - ) != "0"; //TODO: is there a way exists could be used? + return newSelect("count(*)") + .from("AB_ATTRIBUTEUSAGE") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID") + .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType) + .and("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", "1") + .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# != ?") + .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.GROUP, "# != ?") + .cell() != "0"; //TODO: is there a way exists could be used? } /*********************************************************************************************************************/ @@ -367,12 +367,6 @@ function AttributeRelationUtils () {} */ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObjectType, pGetViewValue, pGetAttrname) { - var attrCond = SqlCondition.begin() - .andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId) - .andPrepare("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId); - if (pObjectType != null) - attrCond.andPrepare("AB_ATTRIBUTERELATION.OBJECT_TYPE", pObjectType); - var defaultFields = [ "AB_ATTRIBUTE.ATTRIBUTE_TYPE", "AB_ATTRIBUTE.DROPDOWNDEFINITION", @@ -383,11 +377,11 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj defaultFields.push("AB_ATTRIBUTE.ATTRIBUTE_NAME"); var valueFields = AttributeTypeUtil.getAllDatabaseFields(); - var attributeSql = attrCond.buildSql("select " + defaultFields.join(", ") + ", " + valueFields.join(", ") - + " from AB_ATTRIBUTERELATION join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID" - + " left join AB_ATTRIBUTE COMBOVAL on " + $AttributeTypes.COMBO.databaseField + " = COMBOVAL.AB_ATTRIBUTEID"); - - var attributeValues = db.array(db.ROW, attributeSql); + + var attributeValues = AttributeRelationUtils.getAttributeSqlBuilder(defaultFields.concat(valueFields), pObjectRowId, pObjectType) + .and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId) + .arrayRow(); + if (!attributeValues.length) return null; @@ -403,6 +397,27 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj return value; } +/** + * Get a SqlBuilder already containing the full select for attributes. + * @param {String[]} pFields array of all fields which should be selected + * @param {String} pObjectRowId object rowid + * @param {String} [pObjectType=null] object-type + * + * @return {SqlBuilder} a already filled SqlBuilder + */ +AttributeRelationUtils.getAttributeSqlBuilder = function (pFields, pObjectRowId, pObjectType) +{ + if (!pObjectType) + pObjectType = null; + + return newSelect(pFields) + .from("AB_ATTRIBUTERELATION") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID") + .leftJoin("AB_ATTRIBUTE COMBOVAL", $AttributeTypes.COMBO.databaseField + " = COMBOVAL.AB_ATTRIBUTEID") + .where("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId) + .andIfSet("AB_ATTRIBUTERELATION.OBJECT_TYPE", pObjectType); +} + /** * gets all attributes for a dataset * @@ -416,12 +431,7 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj * @return {String[][]} two-dimensional array a row is [attributeId|attributeName, value] (or [attributeId, attributeName, value]) */ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, pUseAttributeIds, pUseIdValues) -{ - var attrCond = SqlCondition.begin() - .andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId); - if (pObjectType != null) - attrCond.andPrepare("AB_ATTRIBUTERELATION.OBJECT_TYPE", pObjectType); - +{ var defaultFields = [ "AB_ATTRIBUTE_ID", "AB_ATTRIBUTE.ATTRIBUTE_TYPE", @@ -429,12 +439,13 @@ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, p "COMBOVAL.ATTRIBUTE_NAME" ]; var valueFields = AttributeTypeUtil.getAllDatabaseFields(); - var attributeSql = attrCond.buildSql("select " + defaultFields.join(", ") + ", " + valueFields.join(", ") - + " from AB_ATTRIBUTERELATION join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID" - + " left join AB_ATTRIBUTE COMBOVAL on " + $AttributeTypes.COMBO.databaseField + " = COMBOVAL.AB_ATTRIBUTEID"); var attributeNameMap = {}; - var attributeValues = db.table(attributeSql).map(function (row) + + var attributeValues = AttributeRelationUtils.getAttributeSqlBuilder(defaultFields.concat(valueFields), pObjectRowId, pObjectType) + .arrayRow(); + + attributeValues = attributeValues.map(function (row) { let attribute = row[0]; let attrname; @@ -485,11 +496,11 @@ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, p */ AttributeRelationUtils.selectAttributeValue = function (pAttributeId, pValueMap, pGetViewValue) { - var sqlSelect = "select ATTRIBUTE_TYPE, DROPDOWNDEFINITION from AB_ATTRIBUTE"; - var type = db.array(db.ROW, SqlCondition.begin() - .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId) - .buildSql(sqlSelect) - ); + var type = newSelect("ATTRIBUTE_TYPE, DROPDOWNDEFINITION") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId) + .arrayRow(); + if (!type.length) return null; @@ -498,10 +509,10 @@ AttributeRelationUtils.selectAttributeValue = function (pAttributeId, pValueMap, var value = pValueMap[field]; if (pGetViewValue && type[0] == $AttributeTypes.COMBO) { - value = db.cell(SqlCondition.begin() - .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", value) - .buildSql("select ATTRIBUTE_NAME from AB_ATTRIBUTE") - ); + value = newSelect("ATTRIBUTE_NAME") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", value) + .cell(); } else if (pGetViewValue) value = AttributeTypeUtil.getAttributeViewValue(type[0], value, type[1]); @@ -550,16 +561,16 @@ AttributeRelationUtils.insertAttribute = function (pRowId, pObjectType, pAttribu */ AttributeRelationUtils.presetMandatoryAttributes = function (pObjectType, pConsumer) { - var mandatoryAttributes = db.table( - SqlCondition.begin() - .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType) - .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# <> ?") - .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.GROUP, "# <> ?") - .and("ATTRIBUTE_ACTIVE = 1") - .and("MIN_COUNT > 0") - .buildSql("select AB_ATTRIBUTE_ID, MIN_COUNT from AB_ATTRIBUTEUSAGE " - + "join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTEID") - ); + var mandatoryAttributes = newSelect("AB_ATTRIBUTE_ID, MIN_COUNT") + .from("AB_ATTRIBUTEUSAGE") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTE_ID = AB_ATTRIBUTEID") + .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType) + .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# <> ?") + .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.GROUP, "# <> ?") + .and("ATTRIBUTE_ACTIVE = 1") + .and("MIN_COUNT > 0") + .table(); + mandatoryAttributes.forEach(function (usage) { //adding an attribute more than 20 times would be too much (having a min_count > 20 is very unlikely) @@ -615,21 +626,21 @@ AttributeRelationUtils.validateAttributeCount = function (pRowId, pObjectType, p this[row.AB_ATTRIBUTE_ID] = (this[row.AB_ATTRIBUTE_ID] || 0) + 1; }, countObj); } - var attributeCondition = SqlCondition.begin(); - AttributeUtil.getPossibleAttributes(pObjectType, undefined, pFilteredAttributeIds).forEach(function (attributeId) - { - this.orPrepare("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", attributeId); - }, attributeCondition); - var usageCondition = SqlCondition.begin() - .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType) - .andSqlCondition(attributeCondition, "1=2"); + var possibleAttributes = AttributeUtil.getPossibleAttributes(pObjectType, undefined, pFilteredAttributeIds); + var minMaxCounts = []; - //retrieve all min/max counts of the possible attributes - var minMaxCounts = db.table(usageCondition.buildSql( - "select AB_ATTRIBUTEID, ATTRIBUTE_NAME, MIN_COUNT, MAX_COUNT from AB_ATTRIBUTEUSAGE \ - join AB_ATTRIBUTE on AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID", "1=2" - )); + if (possibleAttributes.length > 0) + { + var minMaxCountsSelect = newSelect("AB_ATTRIBUTEID, ATTRIBUTE_NAME, MIN_COUNT, MAX_COUNT") + .from("AB_ATTRIBUTEUSAGE") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID") + .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", possibleAttributes, SqlBuilder.IN()) + .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType) + + //retrieve all min/max counts of the possible attributes + minMaxCounts = minMaxCountsSelect.table(); + } var validationMessage = []; minMaxCounts.forEach(function ([attributeId, name, minCount, maxCount]) @@ -914,6 +925,7 @@ AttributeTypeUtil.getContentType = function (pAttributeType) */ AttributeTypeUtil.isGroupType = function (pAttributeType) { + logging.log(JSON.stringify([pAttributeType], null, "\t")) if (pAttributeType) { pAttributeType = pAttributeType.trim(); -- GitLab