private bool ProcessUSCTag(InternalBookmarkItem ibmItem, DSIconType dataTagType, string itemName, ref GenOsqlParamInfo paramInfo, ref Dictionary <string, bool> dataTagChecker) { if (dataTagType == DSIconType.USC) { GetTableIndexForUSC(ibmItem, ref paramInfo); USCItem usc = paramInfo.UscItems[itemName]; string orderFieldName = usc.BaseOnField; if (!string.IsNullOrWhiteSpace(orderFieldName) && !dataTagChecker.ContainsKey(orderFieldName)) { InternalBookmarkItem exist = (from c in paramInfo.IbmDomain.InternalBookmarkItems where (c.TableIndex == usc.TableIndex) && (string.Equals(c.ItemType, DSIconType.Field.ToString())) select c).FirstOrDefault(); //If existed one data field in selected tag, shouldnot include data field in udf if (exist == null || string.IsNullOrEmpty(exist.BizName)) { InternalBookmarkItem bm = AddUdfFields(orderFieldName, ref paramInfo); dataTagChecker.Add(BaseMarkupUtilities.GetOriginalBizName(bm.Key, bm.BizName), true); } else { dataTagChecker.Add(itemName, true); paramInfo.AddDataTags(ibmItem, true); } } return(true); } return(false); }
protected string GenSelectClauseForUSC(InternalBookmarkItem ibmItem, ref GenOsqlParamInfo paramInfo) { //1.Find USC bookmark in the list Conditions to get actual USC. //2.Build SQl string sqlClause = string.Empty; string itemName = BaseMarkupUtilities.GetOriginalBizName(ibmItem.Key, ibmItem.BizName); if (paramInfo.UscItems == null || paramInfo.UscItems.Count <= 0 || ibmItem.Key.EndsWith(BaseProntoMarkup.KeyEndIf)) { return(sqlClause); } USCItem uscItem = null; if (paramInfo.UscItems.Keys.Contains(itemName)) { uscItem = paramInfo.UscItems[itemName]; } // Dictionary <string, DSTreeView> lowerFields = new Dictionary <string, DSTreeView>(); foreach (string key in paramInfo.DomainInfo.Fields.Keys) { lowerFields.Add(key.ToLower(), paramInfo.DomainInfo.Fields[key]); } //Validate and Build SQl if (uscItem != null) { List <Token> lstTokens = new List <Token>(); string error = string.Empty; ExpressionProvider expressProvider = new ExpressionProvider(); expressProvider.DoTokenize(uscItem.SQLExpression, ref lstTokens, ref error); foreach (Token token in lstTokens) { string key = string.Empty; if (token.Name.Contains("[") && token.Name.Contains("]")) { key = token.Name.Substring(1, token.Name.Length - 2).ToLower(); if (lowerFields.ContainsKey(key)) { token.Name = lowerFields[key].TechName; if (paramInfo.DSRelationRow == null) { paramInfo.DSRelationRow = lowerFields[key].Relation.Clone(); } else { paramInfo.DSRelationRow.OrRow(lowerFields[key].Relation); } } } sqlClause += token.Name + " "; } } return(sqlClause.Trim()); }
protected void AddItemToListJParameters(string norTechName, ref GenOsqlParamInfo paramInfo, Dictionary <string, string> selectClauseParams, bool insertAtStart = false) { if (!selectClauseParams.ContainsKey(norTechName)) { return; } string paramName = selectClauseParams[norTechName]; //string paramName = "@" + norTechName; bool isNotExist = paramInfo.JParameters.Count(c => string.Compare(c.ParamName, paramName, true) == 0) == 0; if (isNotExist) { JParameter newJParam = new JParameter();//Value of Index property will be set later, before save newJParam.ParamName = paramName; newJParam.DataType = new SQLDBType(SQLTypeName.NVARCHAR); if (insertAtStart) { paramInfo.JParameters.Insert(0, newJParam); } else { paramInfo.JParameters.Add(newJParam); } } }
//private void GenFromClause(ref GenOsqlParamInfo paramInfo) //{ // paramInfo.FormClause = paramInfo.DomainInfo.DSDomainData.GetFromClause(paramInfo.DSRelationRow, AppDbTypes.Oracle); //} #endregion #region gen for xml clause private void GenForXmlClause(ref GenOsqlParamInfo paramInfo) { paramInfo.OsqlXmlItem = new OsqlXmlItem(); paramInfo.OsqlXmlItem.Paths = new List <OsqlXmlItemPath>(); foreach (OsqlStringBuilder item in paramInfo.OsqlStringBuilders) { OsqlXmlItemPath osqlXmlItemPath = new OsqlXmlItemPath(); osqlXmlItemPath.Osql = item.Osql.ToString().TrimEnd(); osqlXmlItemPath.JSql = item.JOsql.ToString().TrimEnd(); if (!string.IsNullOrWhiteSpace(item.SelectedColumns)) { if (item.SelectedColumns.StartsWith(",")) { osqlXmlItemPath.SelectedColumns = item.SelectedColumns.Remove(0, 1); } else { osqlXmlItemPath.SelectedColumns = item.SelectedColumns; } } paramInfo.OsqlXmlItem.Paths.Add(osqlXmlItemPath); } paramInfo.OsqlXmlItem.Index = paramInfo.IndexOfDomain; paramInfo.OsqlXmlItem.DomainName = paramInfo.DomainInfo.DSDomainData.Name; paramInfo.OsqlXmlItem.EncodeDomainName = BaseMarkupUtilities.XmlEncode(paramInfo.DomainInfo.DSDomainData.Name); }
private bool ProcessStartForeachTag(string ibmItemKey, string ibmItemBizName, ref GenOsqlParamInfo paramInfo, ref Dictionary <string, bool> dataTagChecker) { if (ibmItemKey.Contains(BaseProntoMarkup.KeyStartForeach)) // update for add sort item in for-each { Dictionary <string, OrderByType> sorteds = BaseMarkupUtilities.GetOldOrderBy(ibmItemBizName, false); if (sorteds.Count > 0) // has sort in for-each { foreach (string orderBizName in sorteds.Keys) { string sortBizName = paramInfo.DomainInfo.GetUdfSortedBizName(orderBizName); if (sortBizName != orderBizName) // has order by bizname { if (dataTagChecker.ContainsKey(sortBizName)) { continue; } InternalBookmarkItem bm = AddUdfFields(sortBizName, ref paramInfo); dataTagChecker.Add(BaseMarkupUtilities.GetOriginalBizName(bm.Key, bm.BizName), true); } } } return(true); } return(false); }
private void UpdateOsqlXmlItem(ref GenOsqlParamInfo paramInfo) { if (paramInfo.OsqlStringBuilders == null) { paramInfo.OsqlStringBuilders = new List <OsqlStringBuilder>(); } if (paramInfo.FromClauses == null) { paramInfo.FromClauses = new List <string>(); } // remove latest comma bool isRemove = false; int index = paramInfo.OsqlStringBuilder.Osql.Length - 1; while (!isRemove && index >= 0) { char ch = paramInfo.OsqlStringBuilder.Osql[index]; if (ch != '\n' && ch != '\r' && ch != ' ' && ch != ',') { break; } if (ch == ',') { isRemove = true; paramInfo.OsqlStringBuilder.Osql[index] = ' '; } index--; } isRemove = false; index = paramInfo.OsqlStringBuilder.JOsql.Length - 1; while (!isRemove && index >= 0) { char ch = paramInfo.OsqlStringBuilder.JOsql[index]; if (ch != '\n' && ch != '\r' && ch != ' ' && ch != ',') { break; } if (ch == ',') { isRemove = true; paramInfo.OsqlStringBuilder.JOsql[index] = ' '; } index--; } paramInfo.OsqlStringBuilders.Add(paramInfo.OsqlStringBuilder); GenWhereClause(ref paramInfo); //if (paramInfo.DSWhereClauseRelationRow != null) //{ // if (paramInfo.DSRelationRow == null) // paramInfo.DSRelationRow = paramInfo.DSWhereClauseRelationRow.Clone(); // else // paramInfo.DSRelationRow.OrRow(paramInfo.DSWhereClauseRelationRow); //} paramInfo.FromClauses.Add(paramInfo.DomainInfo.DSDomainData.GetFromClause( paramInfo.DSWhereClauseRelationRow, paramInfo.DSRelationRow, AppDbTypes.Oracle)); }
private void UpdateSelectedColumns(ref GenOsqlParamInfo paramInfo, string tableName, string bizName) { if (paramInfo.CurrentTableName != tableName) { paramInfo.OsqlStringBuilder.SelectedColumns = paramInfo.OsqlStringBuilder.SelectedColumns + string.Format(",[{0}]", tableName); paramInfo.CurrentTableName = tableName; } paramInfo.OsqlStringBuilder.SelectedColumns = paramInfo.OsqlStringBuilder.SelectedColumns + string.Format(",{0}", bizName); }
//private void GenFromClause(ref GenOsqlParamInfo paramInfo) //{ // paramInfo.FormClause = paramInfo.DomainInfo.DSDomainData.GetFromClause(paramInfo.DSRelationRow); //} #endregion #region gen for xml clause private void GenForXmlClause(ref GenOsqlParamInfo paramInfo) { //For XML Auto string forXml = string.Empty; string domainEncoded = BaseMarkupUtilities.XmlEncode(paramInfo.IbmDomain.DomainName); if (paramInfo.HasField) { if (!paramInfo.IsNeedInKeyword) { forXml = string.Format(Sql08QueryConstants.XmlAuto.ForXMLAuto, domainEncoded); } else { forXml = string.Format(Sql08QueryConstants.XmlAuto.ForXMLAutoIn, domainEncoded); } } else { string rootTable = paramInfo.SelectedTables[0][0]; if (!paramInfo.IsNeedInKeyword) { forXml = string.Format(Sql08QueryConstants.XmlAuto.ForXMLAutoIn, rootTable, domainEncoded); } else { forXml = string.Format(Sql08QueryConstants.XmlAuto.ForXMLRawIn, rootTable, domainEncoded); } } paramInfo.OsqlXmlItem = new OsqlXmlItem(); paramInfo.OsqlXmlItem.Paths = new List <OsqlXmlItemPath>(); foreach (OsqlStringBuilder item in paramInfo.OsqlStringBuilders) { item.AppendLine(forXml); //Prepare for return if (paramInfo.HasImage) { item.Append(Sql08QueryConstants.SQLBase64); } OsqlXmlItemPath osqlXmlItemPath = new OsqlXmlItemPath(); osqlXmlItemPath.Osql = item.Osql.ToString().TrimEnd(); osqlXmlItemPath.JSql = item.JOsql.ToString().TrimEnd(); if (paramInfo.IsNeedInKeyword) { osqlXmlItemPath.Osql = string.Format(Sql08QueryConstants.SQLWithIn, osqlXmlItemPath.Osql); osqlXmlItemPath.JSql = string.Format(Sql08QueryConstants.SQLWithIn, osqlXmlItemPath.JSql); } paramInfo.OsqlXmlItem.Paths.Add(osqlXmlItemPath); } paramInfo.OsqlXmlItem.Index = paramInfo.IndexOfDomain; paramInfo.OsqlXmlItem.DomainName = paramInfo.DomainInfo.DSDomainData.Name; paramInfo.OsqlXmlItem.EncodeDomainName = BaseMarkupUtilities.XmlEncode(paramInfo.DomainInfo.DSDomainData.Name); }
/// <summary> /// remove Foreach tag and If tag out of internal bookmark object /// </summary> /// <param name="ibmDomain"></param> /// <param name="itemKey"></param> /// <param name="itemName"></param> /// <param name="dataTagChecker"></param> /// <returns></returns> private bool ProcessEndForeachIfTag(ref GenOsqlParamInfo paramInfo, string itemKey, string itemName, Dictionary <string, bool> dataTagChecker) { if (itemKey.Contains(BaseProntoMarkup.KeyEndForeach) || itemKey.Contains(BaseProntoMarkup.KeyEndIf) || (dataTagChecker.ContainsKey(itemName))) { return(true); } return(false); }
protected void UpdateChecksumInfo(ref GenOsqlParamInfo paramInfo, Dictionary <string, string> dicSelectClauseParams, int dbType) { ChecksumInfoItem = new ProntoDoc.Framework.CoreObject.PdwxObjects.ChecksumInfoItem(); ChecksumInfoItem.AppID = paramInfo.DomainInfo.DSDomainData.AppID; ChecksumInfoItem.Classifier = paramInfo.DomainInfo.DSDomainData.Classifier; ChecksumInfoItem.DBID = paramInfo.DomainInfo.DSDomainData.DBID; ChecksumInfoItem.DBType = dbType; ChecksumInfoItem.DomainAlias = paramInfo.DomainInfo.DSDomainData.Alias; ChecksumInfoItem.DomainName = paramInfo.DomainInfo.DSDomainData.Name; ChecksumInfoItem.DDName = paramInfo.DomainInfo.DSDomainData.DDName; ChecksumInfoItem.DDNameNormalised = paramInfo.DomainInfo.DSDomainData.DDNormalisedName; ChecksumInfoItem.HightlightColor = paramInfo.IbmDomain.Color; if (paramInfo.IbmDomain.InternalBookmarkItems != null) { ChecksumInfoItem.BookmarkNames = paramInfo.IbmDomain.InternalBookmarkItems.Select(ibmItem => ibmItem.Key).ToList(); } else { ChecksumInfoItem.BookmarkNames = new List <string>(); } ChecksumInfoItem.HasDataTag = paramInfo.IbmDomain.HasDataTag; // ChecksumInfoItem.HasDocumentSpecific = paramInfo.IbmDomain.HasDocumentSpecific; // render argument bool hasRenderX = ((paramInfo.RenderXY & 1) == 1) ? true : false; bool hasRenderY = ((paramInfo.RenderXY & 2) == 2) ? true : false; ChecksumInfoItem.RenderArgument = ConvertHelper.ConvertDataAgrumentToSXRenderArgument( paramInfo.DomainInfo.DomainArgument.Parameters, hasRenderX, hasRenderY); //Remove previous parameters of the old Select clause that has built before if (paramInfo.DomainInfo.DomainArgument.JParameters == null) { paramInfo.DomainInfo.DomainArgument.JParameters = new List <JParameter>(); } else { paramInfo.DomainInfo.DomainArgument.JParameters.RemoveAll(c => dicSelectClauseParams.ContainsValue(c.ParamName)); } //Insert System Argument form current Select clause paramInfo.DomainInfo.DomainArgument.JParameters.InsertRange(0, paramInfo.JParameters); //Reindex the JParams for (int i = 0; i < paramInfo.DomainInfo.DomainArgument.JParameters.Count; i++) { paramInfo.DomainInfo.DomainArgument.JParameters[i].Index = i + JAVA_LIST_BASE_INDEX; } ChecksumInfoItem.JRenderArgument = ConvertHelper.ConvertDataAgrumentToSXJRenderArgument( paramInfo.DomainInfo.DomainArgument.JParameters, paramInfo.DomainInfo.DomainArgument.RenderArgumentX, paramInfo.DomainInfo.DomainArgument.RenderArgumentY); ChecksumInfoItem.SystemParameter = paramInfo.SysParameter; }
/// <summary> /// extract all field in UDF tag /// </summary> /// <param name="bizName"></param> /// <param name="dataTagFields"></param> /// <param name="dataTagOthers"></param> /// <returns></returns> private InternalBookmarkItem AddUdfFields(string bizName, ref GenOsqlParamInfo paramInfo) { string bookmarkKey = DateTime.Now.ToString(BaseProntoMarkup.BookmarkKeyFormat); DSTreeView item = paramInfo.DomainInfo.GetField(bizName); InternalBookmarkItem bm = new InternalBookmarkItem(bookmarkKey, item.Text, item.TechName, item.Type.ToString(), item.TableIndex, item.Relation, 1); bm.UniqueName = item.UniqueName; bm.DataType = item.DataType; bm.Type = XsltType.Select; paramInfo.AddDataTags(bm, true); return(bm); }
public override void GenOsql(DomainInfo domain, InternalBookmark ibm, int domainIndex) { GenOsqlParamInfo paramInfo = new GenOsqlParamInfo(); paramInfo.DomainInfo = domain; paramInfo.IbmDomain = ibm.GetInternalBookmarkDomain(domain.DSDomainData.Name); paramInfo.IndexOfDomain = domainIndex; GenOsql(ref paramInfo); paramInfo.OsqlXmlItem.DatabaseType = 2; OsqlXmlItem = paramInfo.OsqlXmlItem; UpdateChecksumInfo(ref paramInfo, OracleQueryConstants.DicSelectClauseParamName, PdxDbTypes.ipx_oracle); }
private void GenSelectClauseForField(InternalBookmarkItem bmItem, ref GenOsqlParamInfo paramInfo) { string itemName = BaseMarkupUtilities.GetOriginalBizName(bmItem.Key, bmItem.BizName); DSTreeView item = paramInfo.DomainInfo.GetField(itemName); DSIconType type = (DSIconType)Enum.Parse(typeof(DSIconType), bmItem.ItemType); double i = Math.Log((double)bmItem.TableIndex, (double)2); DSOnClause table = paramInfo.DomainInfo.DSDomainData.OnClauses.Items[bmItem.TableIndex]; string tableName = table.Alias; paramInfo.PutSelectedTable(tableName, false); paramInfo.SelectedTableIndexes.Add(item.TableIndex); UpdateSelectedColumns(ref paramInfo, tableName, itemName); InternalBookmarkItem existedItem = paramInfo.DataTagFields.FirstOrDefault(a => a.TableIndex == item.TableIndex && a.DSIconType == DSIconType.Field); bool isImageTrunc = bmItem.IsTruncImage(); if (isImageTrunc && existedItem != null && existedItem.BizName == bmItem.BizName && !paramInfo.TablesHasField.Contains(item.TableIndex)) { // this table has only image that is chunked then we need to add one default column GenSelectClauseItem(DSIconType.Field, item.TechName, string.Empty, Guid.NewGuid().ToString(), false, true, ref paramInfo); paramInfo.TablesHasField.Add(item.TableIndex); paramInfo.HasImage = true; } GenSelectClauseItem(type, bmItem.TechName, item.JavaClause, itemName, bmItem.IsTruncImage(), true, ref paramInfo); if (!string.IsNullOrEmpty(item.RenderXYOrder)) { List <string> renderParam = item.RenderXYOrder.Split(';').ToList <string>(); for (int j = 0; j < renderParam.Count; j++) { AddItemToListJParameters((renderParam[j] == "1") ? FrameworkConstants.RenderArgumentX : FrameworkConstants.RenderArgumentY, ref paramInfo, OracleQueryConstants.DicSelectClauseParamName); } } #region Build Extra field if (existedItem == null && !string.IsNullOrEmpty(item.OrginalField) && !paramInfo.TablesHasField.Contains(item.TableIndex)) { GenSelectClauseItem(DSIconType.Field, item.OrginalField, string.Empty, Guid.NewGuid().ToString(), false, true, ref paramInfo); paramInfo.TablesHasField.Add(item.TableIndex); return; } #endregion }
private bool ProcessSelectTag(InternalBookmarkItem ibmItem, DSIconType dataTagType, string itemName, ref GenOsqlParamInfo paramInfo, ref Dictionary <string, bool> dataTagChecker) { if ((ibmItem.TableIndex >= 0 && dataTagType != DSIconType.USC) || (dataTagType == DSIconType.SystemInfo) || (dataTagType == DSIconType.Condition) || (dataTagType == DSIconType.RenderXY)) { if (dataTagType == DSIconType.SystemInfo || (dataTagType == DSIconType.Condition) || (dataTagType == DSIconType.RenderXY)) { ibmItem.TableIndex = Math.Max(0, ibmItem.TableIndex); } dataTagChecker.Add(itemName, true); bool isUdf = dataTagType == DSIconType.UDF || dataTagType == DSIconType.Condition; paramInfo.AddDataTags(ibmItem, isUdf); return(true); } return(false); }
/// <summary> /// using for merge all osql paths into one to post processing get data /// </summary> /// <param name="paramInfo"></param> private void MergeOsqlPaths(ref GenOsqlParamInfo paramInfo) { System.Text.StringBuilder osqlDeclareClause = new System.Text.StringBuilder(); System.Text.StringBuilder osqlSetClause = new System.Text.StringBuilder(); System.Text.StringBuilder osqlSelectClause = new System.Text.StringBuilder(); System.Text.StringBuilder jsqlDeclareClause = new System.Text.StringBuilder(); System.Text.StringBuilder jsqlSetClause = new System.Text.StringBuilder(); System.Text.StringBuilder jsqlSelectClause = new System.Text.StringBuilder(); osqlSelectClause.Append("Select "); jsqlSelectClause.Append("Select "); if (paramInfo.OsqlXmlItem.Paths != null) { int index = 1; foreach (OsqlXmlItemPath path in paramInfo.OsqlXmlItem.Paths) { string osql = path.Osql; string jsql = path.Osql; string variant = string.Format("@pdw_xml_var{0}", index); osqlDeclareClause.AppendLine(string.Format("DECLARE {0} XML;", variant)); osqlSetClause.AppendLine(string.Format("SET {0} = ({1});", variant, osql)); osqlSelectClause.Append(string.Format("{0},", variant)); jsqlDeclareClause.AppendLine(string.Format("DECLARE {0} XML;", variant)); jsqlSetClause.AppendLine(string.Format("SET {0} = ({1});", variant, jsql)); jsqlSelectClause.Append(string.Format("{0},", variant)); index++; } if (osqlSelectClause.Length > 0) { osqlSelectClause = osqlSelectClause.Remove(osqlSelectClause.Length - 1, 1); } if (jsqlSelectClause.Length > 0) { jsqlSelectClause = jsqlSelectClause.Remove(jsqlSelectClause.Length - 1, 1); } paramInfo.OsqlXmlItem.Osql = osqlDeclareClause.ToString() + osqlSetClause.ToString() + osqlSelectClause.ToString(); paramInfo.OsqlXmlItem.Jsql = jsqlDeclareClause.ToString() + jsqlSetClause.ToString() + jsqlSelectClause.ToString(); } }
private int GetTableIndexForUSC(InternalBookmarkItem ibmItem, ref GenOsqlParamInfo paramInfo) { if (paramInfo.UscItems == null || paramInfo.UscItems.Count <= 0) { return(-1); } string itemName = BaseMarkupUtilities.GetOriginalBizName(ibmItem.Key, ibmItem.BizName); USCItem item = paramInfo.UscItems[itemName]; int maxIndex = -1; if (item.Fields.Count > 0) { foreach (USCItem subField in item.Fields) { if (paramInfo.DomainInfo.Fields.Keys.Contains(subField.BusinessName)) { if (maxIndex < paramInfo.DomainInfo.Fields[subField.BusinessName].TableIndex) { maxIndex = paramInfo.DomainInfo.Fields[subField.BusinessName].TableIndex; item.BaseOnField = string.IsNullOrWhiteSpace(paramInfo.DomainInfo.Fields[subField.BusinessName].OrginalField) ? paramInfo.DomainInfo.Fields[subField.BusinessName].Text : paramInfo.DomainInfo.Fields[subField.BusinessName].OrginalField; } } } } ibmItem.TableIndex = maxIndex; item.TableIndex = maxIndex; //Update to Relation DSOnClause table = paramInfo.DomainInfo.DSDomainData.OnClauses.Items[maxIndex]; string tableName = table.Alias; if (!paramInfo.DomainInfo.Relations.MapInfos.ContainsKey(itemName)) { paramInfo.DomainInfo.Relations.MapInfos.Add(itemName, new Mapping(itemName, tableName, itemName)); } else { paramInfo.DomainInfo.Relations.MapInfos[itemName].TableName = tableName; } return(maxIndex); }
/// <summary> /// get list of data tag fields, data tag others and renderxy /// </summary> /// <param name="paramInfo"></param> protected void AnalyzeDataTag(ref GenOsqlParamInfo paramInfo) { paramInfo.RenderXY = 0; paramInfo.UpdateUSCItemsDictionary(); int itemIndex = 0; Dictionary <string, bool> dataTagChecker = new Dictionary <string, bool>(); while (itemIndex < paramInfo.IbmDomain.InternalBookmarkItems.Count) { InternalBookmarkItem ibmItem = paramInfo.IbmDomain.InternalBookmarkItems[itemIndex]; DSIconType type = ibmItem.DSIconType; string itemName = BaseMarkupUtilities.GetOriginalBizName(ibmItem.Key, ibmItem.BizName); DSTreeView dsObject = paramInfo.DomainInfo.GetField(itemName); if (dsObject != null) { paramInfo.RenderXY = paramInfo.RenderXY | CheckRenderXY(dsObject.RenderXYOrder); } else { paramInfo.RenderXY = paramInfo.RenderXY | CheckRenderXY("0"); } itemIndex++; if (ProcessEndForeachIfTag(ref paramInfo, ibmItem.Key, itemName, dataTagChecker)) { continue; } if (ProcessStartForeachTag(ibmItem.Key, ibmItem.BizName, ref paramInfo, ref dataTagChecker)) { continue; } if (ProcessUSCTag(ibmItem, type, itemName, ref paramInfo, ref dataTagChecker)) { continue; } ProcessSelectTag(ibmItem, type, itemName, ref paramInfo, ref dataTagChecker); } }
private void GenOsql(ref GenOsqlParamInfo paramInfo) { paramInfo.CheckIsNeedInKeyword(); // gen select clause GenSelectClause(ref paramInfo); // gen from clause // GenFromClause(ref paramInfo); // ngocbv: move to the end of GenSelectClause // gen where clause // GenWhereClause(ref paramInfo); // ngocbv: move to the end of GenSelectClause // merge select + from + where clause MergeSelectFormWhereClause(ref paramInfo, OracleQueryConstants.DicSelectClauseParamName); // gen for xml clause GenForXmlClause(ref paramInfo); }
protected void MergeSelectFormWhereClause(ref GenOsqlParamInfo paramInfo, Dictionary <string, string> selectClauseParams) { AddItemToListJParameters(FrameworkConstants.PdwWatermark, ref paramInfo, selectClauseParams, true); for (int itemIndex = 0; itemIndex < paramInfo.OsqlStringBuilders.Count; itemIndex++) { if (!string.IsNullOrWhiteSpace(paramInfo.FromClauses[itemIndex])) { paramInfo.OsqlStringBuilders[itemIndex].AppendLine(Sql08QueryConstants.FromClause); paramInfo.OsqlStringBuilders[itemIndex].AppendLine(paramInfo.FromClauses[itemIndex]); } if (!string.IsNullOrWhiteSpace(paramInfo.WhereClauses[itemIndex])) { paramInfo.OsqlStringBuilders[itemIndex].AppendLine(Sql08QueryConstants.WhereClause); paramInfo.OsqlStringBuilders[itemIndex].Osql.AppendLine(paramInfo.WhereClauses[itemIndex]); paramInfo.OsqlStringBuilders[itemIndex].JOsql.AppendLine(paramInfo.JWhereClauses[itemIndex]); } } }
private void GenSelectClause(ref GenOsqlParamInfo paramInfo) { if (paramInfo == null) { paramInfo = new GenOsqlParamInfo(); } if (paramInfo.DomainInfo == null || paramInfo.IbmDomain == null) { paramInfo.OsqlXmlItem = new OsqlXmlItem(); return; } paramInfo.RenderXY = 0; paramInfo.DSRelationRow = null; paramInfo.JParameters = new List <JParameter>(); paramInfo.TablesHasField = new List <int>(); AnalyzeDataTag(ref paramInfo); GenSelectClauseForFields(ref paramInfo); UpdateRelationInfo(ref paramInfo); }
protected void AddItemToSystemParams(string techName, ref GenOsqlParamInfo paramInfo) { switch (techName) { case ProntoDoc.Framework.CoreObject.FrameworkConstants.PluginSystemInfo.TemplateName: paramInfo.SysParameter.HasTemplateName = true; break; case ProntoDoc.Framework.CoreObject.FrameworkConstants.PluginSystemInfo.TemplateVersion: paramInfo.SysParameter.HasTemplateVersion = true; break; case ProntoDoc.Framework.CoreObject.FrameworkConstants.PluginSystemInfo.TemplateID: paramInfo.SysParameter.HasTemplateId = true; break; case ProntoDoc.Framework.CoreObject.FrameworkConstants.PluginSystemInfo.UserId: paramInfo.SysParameter.HasUserId = true; break; case ProntoDoc.Framework.CoreObject.FrameworkConstants.PluginSystemInfo.ComputerName: paramInfo.SysParameter.HasComputerName = true; break; case ProntoDoc.Framework.CoreObject.FrameworkConstants.PluginSystemInfo.GeneratedTime: paramInfo.SysParameter.HasGeneratedTime = true; break; case ProntoDoc.Framework.CoreObject.FrameworkConstants.PluginSystemInfo.RenderRequestID: paramInfo.SysParameter.HasRenderRequestID = true; break; default: break; } }
protected void UpdateRelationInfo(ref GenOsqlParamInfo paramInfo) { paramInfo.PutRootSelectedTable(paramInfo.DomainInfo.DSDomainData.Name); paramInfo.IbmDomain.SelectedTables = paramInfo.SelectedTables; paramInfo.IbmDomain.Relations = paramInfo.DomainInfo.Relations; }
/// <summary> /// separate osql to multi paths /// </summary> /// <param name="fullItems"></param> /// <param name="dsDomain"></param> /// <returns></returns> protected List <List <InternalBookmarkItem> > GetPaths(ref GenOsqlParamInfo paramInfo, List <InternalBookmarkItem> fullItems, DSDomain dsDomain) { List <List <InternalBookmarkItem> > paths = new List <List <InternalBookmarkItem> >(); #region calculate used table indexes Dictionary <int, List <InternalBookmarkItem> > usedTableIndexes = new Dictionary <int, List <InternalBookmarkItem> >(); List <int> sortedTableIndexes = new List <int>(); foreach (InternalBookmarkItem ibmItem in fullItems) { if (!usedTableIndexes.ContainsKey(ibmItem.TableIndex)) { usedTableIndexes.Add(ibmItem.TableIndex, new List <InternalBookmarkItem>()); sortedTableIndexes.Add(ibmItem.TableIndex); } usedTableIndexes[ibmItem.TableIndex].Add(ibmItem); } if (!usedTableIndexes.ContainsKey(0)) { usedTableIndexes.Add(0, new List <InternalBookmarkItem>()); sortedTableIndexes.Add(0); } sortedTableIndexes = sortedTableIndexes.OrderBy(c => c).ToList(); #endregion #region get paths string whereClauseName = "WhereClause"; Dictionary <int, bool> checker = new Dictionary <int, bool>(); List <DSRelationRow> dsRelationRows = dsDomain.TableRelations.Rows.Items; DSRelationRow dsWhereRelationRow = dsRelationRows.FirstOrDefault( c => whereClauseName.Equals(c.Name, StringComparison.OrdinalIgnoreCase)); string whereRelations = BitHelper.ToBinaryFormat(dsWhereRelationRow.Data, true); whereRelations = BaseMarkupUtilities.ReverseString(whereRelations); foreach (DSRelationRow dsRelationRow in dsRelationRows) { if (whereClauseName.Equals(dsRelationRow.Name, StringComparison.OrdinalIgnoreCase)) { paramInfo.DSWhereClauseRelationRow = dsRelationRow; continue; } List <InternalBookmarkItem> path = new List <InternalBookmarkItem>(); string relations = BitHelper.ToBinaryFormat(dsRelationRow.Data, true); relations = BaseMarkupUtilities.ReverseString(relations); bool hasTable = false; foreach (int tableIndex in sortedTableIndexes) { int index = tableIndex; if (relations.Length > index && relations[index] == '1') { path.AddRange(usedTableIndexes[tableIndex]); if (!checker.ContainsKey(tableIndex)) { hasTable = true; checker.Add(tableIndex, true); } } } if (hasTable) { int parentTableIndex = GetParentTableInexInJoinClause(dsWhereRelationRow, dsRelationRow); if (!usedTableIndexes.ContainsKey(parentTableIndex)) { usedTableIndexes.Add(parentTableIndex, new List <InternalBookmarkItem>()); } InternalBookmarkItem ibmItem = usedTableIndexes[parentTableIndex].FirstOrDefault( c => c.TableIndex == parentTableIndex && c.DSIconType == DSIconType.Field); if (ibmItem == null) { DSTreeView firstField = paramInfo.DomainInfo.Fields.Values.FirstOrDefault( c => c.TableIndex == parentTableIndex && c.Type == DSIconType.Field); if (firstField != null) { ibmItem = new InternalBookmarkItem() { BizName = firstField.Text, ItemType = "Field", JavaName = firstField.JavaClause, Key = Guid.NewGuid().ToString(), OrderNo = 1, TableIndex = parentTableIndex, TechName = firstField.TechName, Type = XsltType.Select }; usedTableIndexes[parentTableIndex].Insert(0, ibmItem); path.Insert(0, ibmItem); } } paths.Add(path); } } #endregion return(paths); }
protected void GenWhereClause(ref GenOsqlParamInfo paramInfo) { if (paramInfo.WhereClauses == null) { paramInfo.WhereClauses = new List <string>(); } if (paramInfo.JWhereClauses == null) { paramInfo.JWhereClauses = new List <string>(); } if (paramInfo.DomainInfo.DSDomainData.WhereClause.DSJoins == null || paramInfo.DomainInfo.DSDomainData.WhereClause.DSJoins.Count == 0) { paramInfo.WhereClauses.Add(paramInfo.DomainInfo.DSDomainData.WhereClause.Clause); paramInfo.JWhereClauses.Add(paramInfo.DomainInfo.DSDomainData.WhereClause.JavaClause); } else { paramInfo.DSWhereClauseRelationRow = null; string whereClause = string.Empty; string jWhereClause = string.Empty; string logicType = string.Empty; bool hasRootJoin = false; foreach (DSJoin dsJoin in paramInfo.DomainInfo.DSDomainData.WhereClause.DSJoins) { string usedTables = BitHelper.ToBinaryFormat(dsJoin.Tables.Data, true); usedTables = BaseMarkupUtilities.ReverseString(usedTables); bool isUseDSJoin = true; #region check use or no for (int index = 0; index < usedTables.Length; index++) { if (usedTables[index] == '1') { if (!paramInfo.SelectedTableIndexes.Contains(index)) { isUseDSJoin = false; break; } } } if (!isUseDSJoin) { continue; } #endregion #region build where clause if ("and".Equals(dsJoin.LogicType, StringComparison.OrdinalIgnoreCase) || "or".Equals(dsJoin.LogicType, StringComparison.OrdinalIgnoreCase)) { if (!hasRootJoin) { whereClause = dsJoin.LogicType + " " + dsJoin.Condition + " " + whereClause; jWhereClause = dsJoin.LogicType + " " + dsJoin.JavaCondition + " " + jWhereClause; } else { whereClause = whereClause + " " + dsJoin.LogicType + " " + dsJoin.Condition; jWhereClause = jWhereClause + " " + dsJoin.LogicType + " " + dsJoin.JavaCondition; } logicType = dsJoin.LogicType; } else { whereClause = dsJoin.Condition + " " + whereClause; jWhereClause = dsJoin.JavaCondition + " " + jWhereClause; hasRootJoin = true; } #endregion #region mark used for gen from clause if (paramInfo.DSWhereClauseRelationRow == null) { paramInfo.DSWhereClauseRelationRow = dsJoin.Tables.Clone(); } else { paramInfo.DSWhereClauseRelationRow.OrRow(dsJoin.Tables); } #endregion } if (!hasRootJoin && !string.IsNullOrWhiteSpace(logicType)) { whereClause = whereClause.Substring(logicType.Length); jWhereClause = jWhereClause.Substring(logicType.Length); } paramInfo.WhereClauses.Add(whereClause); paramInfo.JWhereClauses.Add(jWhereClause); if (paramInfo.DSWhereClauseRelationRow == null) { DSRelationRow templateRow = paramInfo.DomainInfo.DSDomainData.WhereClause.DSJoins[0].Tables; paramInfo.DSWhereClauseRelationRow = templateRow.Clone(); for (int index = 0; index < paramInfo.DSWhereClauseRelationRow.Data.Count; index++) { paramInfo.DSWhereClauseRelationRow.Data[index] = paramInfo.DSWhereClauseRelationRow.Data[index] & 0; } foreach (int tableIndex in paramInfo.SelectedTableIndexes) { int index = (tableIndex / 64) + (tableIndex % 64 != 0 ? 1 : 0); index--; if (index >= 0 && index < paramInfo.DSWhereClauseRelationRow.Data.Count) { int position = tableIndex % 64; paramInfo.DSWhereClauseRelationRow.Data[index] = paramInfo.DSWhereClauseRelationRow.TurnOnBit(paramInfo.DSWhereClauseRelationRow.Data[index], position); } } } } }
private void GenSelectClauseForFields(ref GenOsqlParamInfo paramInfo) { paramInfo.HasImage = false; paramInfo.HasField = false; if (paramInfo.DataTagFields != null && paramInfo.DataTagFields.Count > 0) { paramInfo.OrderDataTagFieldsByTableIndex(); List <List <InternalBookmarkItem> > paths = GetPaths(ref paramInfo, paramInfo.DataTagFields, paramInfo.DomainInfo.DSDomainData); foreach (List <InternalBookmarkItem> path in paths) { if (path.Count <= 0) { continue; } paramInfo.OsqlStringBuilder = new OsqlStringBuilder(); paramInfo.OsqlStringBuilder.AppendLine(OracleQueryConstants.SelectClause); paramInfo.DSRelationRow = null; // add paramater for watermark at start of query for osql & jsql paramInfo.OsqlStringBuilder.Osql.AppendLine(string.Format(OracleQueryConstants.SQLSystemInfo, ProntoDoc.Framework.CoreObject.FrameworkConstants.PdwWatermark, ProntoDoc.Framework.CoreObject.FrameworkConstants.PdwWatermark) + OracleQueryConstants.SQLComma); paramInfo.OsqlStringBuilder.JOsql.AppendLine(string.Format(OracleQueryConstants.JSQLSystemInfo, ProntoDoc.Framework.CoreObject.FrameworkConstants.PdwWatermark) + OracleQueryConstants.SQLComma); paramInfo.OsqlStringBuilder.SelectedColumns = string.Empty; paramInfo.CurrentTableName = string.Empty; paramInfo.PutSelectedTable(string.Empty, true); paramInfo.SelectedTableIndexes = new List <int>(); foreach (InternalBookmarkItem item in path) { DSIconType type = item.DSIconType; if (type == DSIconType.Field) { paramInfo.HasField = true; } if (type == DSIconType.USC) { string sqlUSC = GenSelectClauseForUSC(item, ref paramInfo); string itemBizName = BaseMarkupUtilities.GetOriginalBizName(item.Key, item.BizName); GenSelectClauseItem(type, sqlUSC, string.Empty, itemBizName, false, true, ref paramInfo); string tableName = paramInfo.SelectedTables[0][0]; UpdateSelectedColumns(ref paramInfo, tableName, itemBizName); } else { if (item.Relation != null) { if (paramInfo.DSRelationRow == null) { paramInfo.DSRelationRow = item.Relation.Clone(); } else { paramInfo.DSRelationRow.OrRow(item.Relation); } } GenSelectClauseForField(item, ref paramInfo); } if (item != null && item.DataType != null && (item.DataType.Name == SQLTypeName.BINARY || item.DataType.Name == SQLTypeName.VARBINARY)) { paramInfo.HasImage = true; } } UpdateOsqlXmlItem(ref paramInfo); } } }
private void GenSelectClauseItem(DSIconType type, string techName, string javaName, string name, bool isImage, bool isField, ref GenOsqlParamInfo paramInfo) { name = NormalizeBizName(name); switch (type) { case DSIconType.UDF: { paramInfo.OsqlStringBuilder.Osql.AppendLine(string.Format(OracleQueryConstants.SQLUDFFormat, techName, name) + OracleQueryConstants.SQLComma); paramInfo.OsqlStringBuilder.JOsql.AppendLine(string.Format(OracleQueryConstants.SQLUDFFormat, javaName, name) + OracleQueryConstants.SQLComma); } break; case DSIconType.Field: { string select = string.Format(OracleQueryConstants.SQLFieldFormat, isImage ? string.Format(OracleQueryConstants.UdfTruncImage, techName) : techName, name) + OracleQueryConstants.SQLComma; paramInfo.OsqlStringBuilder.Osql.AppendLine(select); select = string.Format(OracleQueryConstants.SQLFieldFormat, isImage ? string.Format(OracleQueryConstants.UdfTruncImage, javaName) : javaName, name) + OracleQueryConstants.SQLComma; paramInfo.OsqlStringBuilder.JOsql.AppendLine(select); } break; case DSIconType.Condition: case DSIconType.USC: if (!string.IsNullOrEmpty(techName)) { string select = string.Format(OracleQueryConstants.SQLConditionFormat, techName, name) + OracleQueryConstants.SQLComma; paramInfo.OsqlStringBuilder.AppendLine(select); } break; case DSIconType.SystemInfo: case DSIconType.RenderXY: if (string.Compare(techName, ProntoDoc.Framework.CoreObject.FrameworkConstants.PluginSystemInfo.GeneratedTime) == 0) { string select = string.Format(OracleQueryConstants.SQLGeneratedTime, name) + OracleQueryConstants.SQLComma; paramInfo.OsqlStringBuilder.AppendLine(select); } else { AddItemToListJParameters(techName, ref paramInfo, OracleQueryConstants.DicSelectClauseParamName); string norTechName = techName.Replace(" ", ""); string select; string jSelect; if (!paramInfo.IsNeedInKeyword) { select = string.Format(OracleQueryConstants.SQLSystemInfo, norTechName, name) + OracleQueryConstants.SQLComma; jSelect = string.Format(OracleQueryConstants.JSQLSystemInfo, name) + OracleQueryConstants.SQLComma; } else { select = string.Format(OracleQueryConstants.SQLSystemInfoWithIn, norTechName, name) + OracleQueryConstants.SQLComma; jSelect = string.Format(OracleQueryConstants.JSQLSystemInfoWithIn, name) + OracleQueryConstants.SQLComma; } paramInfo.OsqlStringBuilder.Osql.AppendLine(select); paramInfo.OsqlStringBuilder.JOsql.AppendLine(jSelect); } AddItemToSystemParams(techName, ref paramInfo); break; } }