private static StrSpan GetContent中括号(char[] sql, StrSpan s) { char cLeft = sql[s.iLeft]; char cRight = sql[s.iRight]; if (s.iLeft == s.iRight) { throw new SelectDataTableException("无效的 中括号, 缺少 结束中括号 。 ", sql, s.iLeft); } if (cRight != ']') { throw new SelectDataTableException("无效的 中括号, 缺少 结束中括号 。 ", sql, s.iRight); } if (s.iRight == s.iLeft + 1) { s = new StrSpan(s.iLeft, s.iRight); s.isEmpty = true; return(s); } s = StrUtil.Trim(sql, s.iLeft + 1, s.iRight - 1, _whiteSpaces); return(new StrSpan(s.iLeft, s.iRight)); }
internal static List <string> GetColumnList(char[] sql, Word wColumns) { List <string> columnList = new List <string>(); List <StrSpan> tokenList = StrUtil.Split(sql, wColumns.iLeft, wColumns.iRight, ','); char cLeft; char cRight; StrSpan s; for (int i = 0; i < tokenList.Count; i++) { s = tokenList[i]; if (s.isEmpty) { throw new SelectDataTableException("列名 不能 为空 。 ", sql, s.iLeft); } s = StrUtil.Trim(sql, s.iLeft, s.iRight, Parser._whiteSpaces); if (s.isEmpty) { throw new SelectDataTableException("列名 不能 为空 。 ", sql, s.iLeft); } cLeft = sql[s.iLeft]; if (s.iLeft == s.iRight && (cLeft == '[' || cLeft == ']')) { throw new SelectDataTableException("无效的 列名 \"" + cLeft + "\" 。 ", sql, s.iLeft); } cRight = sql[s.iRight]; if (cLeft == '[' && cRight == ']') { if (s.iLeft == s.iRight - 1) { throw new SelectDataTableException("列名 不能 为空 。 ", sql, s.iLeft); } s = StrUtil.Trim(sql, s.iLeft + 1, s.iRight - 1, Parser._whiteSpaces); if (s.isEmpty) { throw new SelectDataTableException("列名 不能 为空 。 ", sql, s.iLeft); } columnList.Add(new string(sql, s.iLeft, s.iRight - s.iLeft + 1)); } else if (cLeft == '[' && cRight != ']') { throw new SelectDataTableException("中括号 [] 未成对出现 。 ", sql, s.iLeft); } else if (cLeft != '[' && cRight == ']') { throw new SelectDataTableException("中括号 [] 未成对出现 。 ", sql, s.iRight); } else { s = StrUtil.Trim(sql, s.iLeft, s.iRight, Parser._whiteSpaces); columnList.Add(new string(sql, s.iLeft, s.iRight - s.iLeft + 1)); } } return(columnList); }
private static StrSpan GetContent小括号(char[] sql, StrSpan s) { char cLeft = sql[s.iLeft]; char cRight = sql[s.iRight]; if (s.iLeft == s.iRight) { throw new SelectDataTableException("无效的 小括号, 缺少 结束小括号 。 ", sql, s.iLeft); } if (s.iRight == s.iLeft + 1) { if (cRight == ')') { s = new StrSpan(s.iLeft, s.iRight); s.isEmpty = true; return(s); } else { throw new SelectDataTableException("无效的 小括号, 缺少 结束小括号 。 ", sql, s.iRight); } } int i = FindWrapperEnd小括号(sql, s.iLeft, s.iRight); if (i == -1) { throw new SelectDataTableException("无效的 小括号, 缺少 结束小括号 。 ", sql, s.iRight); } if (i < s.iRight) { throw new SelectDataTableException("语法错误。存在无效的字符 。 ", sql, i + 1); } s = StrUtil.Trim(sql, s.iLeft + 1, s.iRight - 1, _whiteSpaces); // 去掉 小括号 并 对 内容 Trim return(s); //if ( s.isEmpty ) //{ // s = new StrSpan(s.iLeft, s.iRight); // s.isEmpty = true; // return s; //} //i = s.iLeft; //int j = s.iRight; //while (true) //{ // if (sql[i] == '(' && sql[j] == ')') // { // if (i + 1 == j) // { // s = new StrSpan(i, j); // s.isEmpty = true; // return s; // } // if (i + 1 <= j - 1) // { // i++; // j--; // } // } // else // { // break; // } // //return GetContent小括号(sql, s); // 去掉 重复 括号 //} //return new StrSpan(s.iLeft, s.iRight); }
public static Content GetContent(char[] sql, int beginIndex, int endIndex) { if (beginIndex > endIndex) { throw new SelectDataTableException("beginIndex 应 小于等于 endIndex 。 beginIndex : " + beginIndex + " endIndex : " + endIndex + " 。 ", sql, beginIndex); } StrSpan s = StrUtil.Trim(sql, beginIndex, endIndex, Parser._whiteSpaces); Content content; if (s.isEmpty) { content = new Content(s.iLeft, s.iRight, ContentType.None); content.isEmpty = true; return(content); } char cLeft = sql[s.iLeft]; char cRight = sql[s.iRight]; if (cLeft == '\'') { s = GetContent单引号(sql, s); content = new Content(s.iLeft, s.iRight, ContentType.String); if (s.isEmpty) { content.isEmpty = true; } return(content); } else if (cLeft == '[') { s = GetContent中括号(sql, s); } else if (cLeft == '(') { s = GetContent小括号(sql, s); content = new Content(s.iLeft, s.iRight, ContentType.Express); if (s.isEmpty) { content.isEmpty = true; } return(content); } if (StrUtil.IsNumber(sql[s.iLeft])) { return(new Content(s.iLeft, s.iRight, ContentType.Number)); } return(new Content(s.iLeft, s.iRight, ContentType.Column)); //throw new Exception("语法错误。 在 第 " + s.iLeft + " 个 字符 \"" + sql[s.iLeft] + "\" 。"); }