IHqlExpression* XmlEclRepository::toNamedSymbol(IPropertyTree* t, const char* module, int access) { const char* name = t->queryProp("@name"); if(*name==':') return 0; int flags = t->getPropInt("@flags", 0); if(access >= cs_read) flags|=ob_showtext; const char* text = t->queryProp("text"); if (!text) text = t->queryProp(""); Owned<IFileContents> contents; if (text && *text) { const char * path = t->queryProp("@sourcePath"); Owned<ISourcePath> sourcePath; if (path) { sourcePath.setown(createSourcePath(path)); } else { StringBuffer defaultName; defaultName.append(module).append('.').append(name); sourcePath.setown(createSourcePath(defaultName)); } contents.setown(createFileContentsFromText(text, sourcePath)); } return CHqlNamedSymbol::makeSymbol(createIdentifierAtom(name), createIdentifierAtom(module), NULL, NULL, (flags&ob_exported)!=0, (flags&ob_shared)!=0, flags|ob_declaration, contents, 0); }
IHqlRemoteScope * XmlEclRepository::resolveScope(IProperties *props, const char * modname, bool deleteIfExists, bool createIfMissing) { Owned<IHqlRemoteScope> parentScope = LINK(rootScope); const char * item = modname; const char * dot; do { dot = strchr(item, '.'); _ATOM moduleName; StringAttr fullName; if (dot) { moduleName = createIdentifierAtom(item, dot-item); fullName.set(modname, dot - modname); item = dot + 1; } else { moduleName = createIdentifierAtom(item); fullName.set(modname); } //nested module already exist in parent scope? Owned<IHqlRemoteScope> rScope = parentScope->lookupRemoteModule(moduleName); if (!rScope && !createIfMissing) return NULL; if (rScope && deleteIfExists && !dot) { rScope->noteTextModified(); if (rScope->isEmpty()) parentScope->removeNestedScope(moduleName); return NULL; } if (!rScope) { rScope.setown(createRemoteScope(moduleName, fullName, this, dot ? NULL : props, NULL, true)); int flags = props->getPropInt("@flags", 0); parentScope->addNestedScope(rScope->queryScope(), flags); } else rScope->invalidateParsed(); parentScope.set(rScope); } while (dot); if (parentScope) parentScope->noteTextModified(); return parentScope.getLink(); }
IHqlExpression * addFilter(IHqlExpression * dataset, IHqlExpression * limitField) { IHqlExpression * lower = createConstant(limitField->queryType()->castFrom(true, (__int64)0)); lower = createValue(no_colon, lower, createValue(no_stored, createConstant(LOWER_LIMIT_ID))); lower = createSymbol(createIdentifierAtom(LOWER_LIMIT_ID), lower, ob_private); dataset = createDataset(no_filter, LINK(dataset), createBoolExpr(no_ge, LINK(limitField), lower)); IHqlExpression * upper = createConstant((int)DISKREAD_PAGE_SIZE); upper = createValue(no_colon, upper, createValue(no_stored, createConstant(RECORD_LIMIT_ID))); upper = createSymbol(createIdentifierAtom(RECORD_LIMIT_ID), upper, ob_private); dataset = createDataset(no_choosen, dataset, upper); dataset = createSymbol(createIdentifierAtom("_Filtered_"), dataset, ob_private); return dataset; }
IHqlExpression * buildWorkUnitViewerEcl(IHqlExpression * record, const char * wuid, unsigned sequence, const char * name) { OwnedHqlExpr newRecord = createSymbol(createIdentifierAtom("_SourceRecord_"), LINK(record), ob_private); IHqlExpression * arg = name ? createConstant(name) : createConstant((int)sequence); OwnedHqlExpr dataset = createDataset(no_workunit_dataset, newRecord.getLink(), createComma(createConstant(wuid), arg)); OwnedHqlExpr projected = addSimplifyProject(dataset); OwnedHqlExpr output = addOutput(projected); return output.getClear(); }
IHqlExpression * addSimplifyProject(IHqlExpression * dataset) { IHqlExpression * record = dataset->queryRecord(); IHqlExpression * projectRecord = getSimplifiedRecord(record, false); if (!projectRecord) return LINK(dataset); projectRecord = createSymbol(createIdentifierAtom("_TargetRecord_"), projectRecord, ob_private); return createDataset(no_newusertable, LINK(dataset), createComma(projectRecord, getSimplifiedTransform(projectRecord, record, dataset))); }
IHqlExpression * buildDiskFileViewerEcl(const char * logicalName, IHqlExpression * record) { //Add filepos to the incomming record structure... IHqlExpression * filePosAttr = createAttribute(virtualAtom, createAttribute(filepositionAtom)); OwnedHqlExpr filepos = createField(fileposName, makeIntType(8, false), NULL, filePosAttr); IHqlExpression * sizeofAttr = createAttribute(virtualAtom, createAttribute(sizeofAtom)); OwnedHqlExpr reclen = createField(recordlenName, makeIntType(2, false), NULL, sizeofAttr); HqlExprArray fields; unwindChildren(fields, record); fields.append(*filepos.getLink()); fields.append(*reclen.getLink()); OwnedHqlExpr newRecord = createRecord(fields); newRecord.setown(createSymbol(createIdentifierAtom("_SourceRecord_"), newRecord.getLink(), ob_private)); OwnedHqlExpr dataset = createNewDataset(createConstant(logicalName), newRecord.getLink(), createValue(no_thor), NULL, NULL, NULL); OwnedHqlExpr filtered = addFilter(dataset, filepos); OwnedHqlExpr projected = addSimplifyProject(filtered); OwnedHqlExpr output = addOutput(projected); return output.getClear(); }