/// <summary> /// </summary> /// <param name="mIsShow"></param> public void InitByCurrentCollection(bool mIsShow) { var columnList = MongoHelper.GetCollectionSchame(RuntimeMongoDbContext.GetCurrentCollection()); var fieldList = new List<DataFilter.QueryFieldItem>(); foreach (var item in columnList) { //输出配置的初始化 var queryFieldItem = new DataFilter.QueryFieldItem(); queryFieldItem.ColName = item; queryFieldItem.IsShow = mIsShow; queryFieldItem.SortType = DataFilter.SortType.NoSort; if (queryFieldItem.ColName == ConstMgr.KeyId) { queryFieldItem.IsShow = true; } fieldList.Add(queryFieldItem); } _mQueryFieldList = fieldList; SetFieldList(); }
//http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart(旧网址) //http://docs.mongodb.org/manual/reference/sql-comparison/ /// <summary> /// Convert Query SqlHelper To DataFilter /// </summary> /// <param name="sql"></param> /// <param name="mongoCol"></param> /// <returns></returns> public static DataFilter ConvertQuerySql(string sql, MongoCollection mongoCol) { var rtnQuery = new DataFilter(); sql = sql.Trim(); //引号中的空格用 代替,引号以外的东西小写 sql = Regular(sql); //先将字符串里面的空格统一成单个空格 //Select A,B From C -> //Select A,B From C while (sql.Contains(" ")) { sql = sql.Replace(" ", " "); } //找出Select ,From , Group var sqlToken = sql.Split(" ".ToCharArray()); var selectStartIndex = -1; var fromStartIndex = -1; var whereStartIndex = -1; var groupByStartIndex = -1; var orderByStartIndex = -1; for (var i = 0; i < sqlToken.Length; i++) { switch (sqlToken[i].ToLower()) { case "select": selectStartIndex = i; break; case "from": fromStartIndex = i; break; case "where": whereStartIndex = i; break; case "group": groupByStartIndex = i; break; case "order": orderByStartIndex = i; break; } } string[] keyWords = { "select", "from", "where", "group", "order" }; //From - > CollectionName GetKeyContent(fromStartIndex, sqlToken, keyWords); //Select 设定 必须项 //Select - > FieldList var strSelect = GetKeyContent(selectStartIndex, sqlToken, keyWords); if (strSelect == string.Empty) { return(null); } var columnNameLst = MongoHelper.GetCollectionSchame(mongoCol); if (strSelect == "*") { //Select * foreach (var item in columnNameLst) { var field = new DataFilter.QueryFieldItem { ColName = item, IsShow = true, SortType = DataFilter.SortType.NoSort }; rtnQuery.QueryFieldList.Add(field); } } else { //Select A,B,C foreach (var item in strSelect.Split(",".ToCharArray())) { var field = new DataFilter.QueryFieldItem { ColName = item, IsShow = true, SortType = DataFilter.SortType.NoSort }; rtnQuery.QueryFieldList.Add(field); } } //Where 设定,可选项 var strWhere = GetKeyContent(whereStartIndex, sqlToken, keyWords); if (strWhere != string.Empty) { rtnQuery.QueryConditionList = SetQueryCondition(strWhere, columnNameLst); } //Order 设定,可选项 var strOrder = GetKeyContent(orderByStartIndex, sqlToken, keyWords); if (strOrder != string.Empty) { SetQueryOrder(rtnQuery, strOrder); } //Group 设定,可选项 var strGroup = GetKeyContent(groupByStartIndex, sqlToken, keyWords); if (strGroup != string.Empty) { //TODO:Group } return(rtnQuery); }
//http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart(旧网址) //http://docs.mongodb.org/manual/reference/sql-comparison/ /// <summary> /// Convert Query SqlHelper To DataFilter /// </summary> /// <param name="sql"></param> /// <param name="mongoCol"></param> /// <returns></returns> public static DataFilter ConvertQuerySql(string sql, MongoCollection mongoCol) { var rtnQuery = new DataFilter(); sql = sql.Trim(); //引号中的空格用 代替,引号以外的东西小写 sql = Regular(sql); //先将字符串里面的空格统一成单个空格 //Select A,B From C -> //Select A,B From C while (sql.Contains(" ")) { sql = sql.Replace(" ", " "); } //找出Select ,From , Group var sqlToken = sql.Split(" ".ToCharArray()); var selectStartIndex = -1; var fromStartIndex = -1; var whereStartIndex = -1; var groupByStartIndex = -1; var orderByStartIndex = -1; for (var i = 0; i < sqlToken.Length; i++) { switch (sqlToken[i].ToLower()) { case "select": selectStartIndex = i; break; case "from": fromStartIndex = i; break; case "where": whereStartIndex = i; break; case "group": groupByStartIndex = i; break; case "order": orderByStartIndex = i; break; } } string[] keyWords = {"select", "from", "where", "group", "order"}; //From - > CollectionName GetKeyContent(fromStartIndex, sqlToken, keyWords); //Select 设定 必须项 //Select - > FieldList var strSelect = GetKeyContent(selectStartIndex, sqlToken, keyWords); if (strSelect == string.Empty) { return null; } var columnNameLst = MongoHelper.GetCollectionSchame(mongoCol); if (strSelect == "*") { //Select * foreach (var item in columnNameLst) { var field = new DataFilter.QueryFieldItem { ColName = item, IsShow = true, SortType = DataFilter.SortType.NoSort }; rtnQuery.QueryFieldList.Add(field); } } else { //Select A,B,C foreach (var item in strSelect.Split(",".ToCharArray())) { var field = new DataFilter.QueryFieldItem { ColName = item, IsShow = true, SortType = DataFilter.SortType.NoSort }; rtnQuery.QueryFieldList.Add(field); } } //Where 设定,可选项 var strWhere = GetKeyContent(whereStartIndex, sqlToken, keyWords); if (strWhere != string.Empty) { rtnQuery.QueryConditionList = SetQueryCondition(strWhere, columnNameLst); } //Order 设定,可选项 var strOrder = GetKeyContent(orderByStartIndex, sqlToken, keyWords); if (strOrder != string.Empty) { SetQueryOrder(rtnQuery, strOrder); } //Group 设定,可选项 var strGroup = GetKeyContent(groupByStartIndex, sqlToken, keyWords); if (strGroup != string.Empty) { //TODO:Group } return rtnQuery; }