Exemple #1
0
        /// <summary>
        /// Форматирование слов
        /// </summary>
        private void ProcessData()
        {
            Process(0, words.Count(), -1);

            int index     = writeWords.FindIndex(l => l.word.StartsWith("esehtnerap"));
            int iterCount = 0;

            while (index >= 0)
            {
                WriteWord  tmpW = writeWords[index];
                Parenthese tmpP = parentheses.Where(p => p.repl_str.Equals(tmpW.word)).First();
                Process(tmpP.left, tmpP.right + 1, index);
                index      = writeWords.FindIndex(l => l.word.StartsWith("esehtnerap"));
                iterCount += 1;
                if (iterCount >= 549)
                {
                    break;
                }
            }

            foreach (var sq in singleQuotes)
            {
                List <WriteWord> tmpLineList = writeWords.Where(l => l.word.Equals(sq.Key, cmp)).ToList();
                int lineCount = tmpLineList.Count();

                for (int i = 0; i < lineCount; i++)
                {
                    WriteWord tmp = tmpLineList[i];
                    tmp.word = sq.Value;
                }
            }
        }
Exemple #2
0
 /// <summary>
 /// Добавление слова
 /// </summary>
 /// <param name="index"></param>
 /// <param name="line"></param>
 private void AddWord(int index, WriteWord word)
 {
     if (index < 0)
     {
         AddWordAtEnd(word);
     }
     else
     {
         AddWordAfter(index, word);
     }
 }
Exemple #3
0
        /// <summary>
        /// Сохранение результата
        /// </summary>
        /// <param name="writer">Действие для записи</param>
        private void SaveSQL(Action <string> writer)
        {
            /*foreach (var t in parentheses)
             * {
             *  string line = t.left + "-" + t.right;
             *  writer(line);
             * }*/

            string    line     = "";
            WriteWord nextWord = new WriteWord();
            WriteWord curWord;

            for (int l = 0; l < writeWords.Count(); l++)
            {
                curWord = writeWords[l];
                if (l != writeWords.Count() - 1)
                {
                    nextWord = writeWords[l + 1];
                }
                if (l == 0)
                {
                    line = "".PadLeft(curWord.intendSize) + curWord.word;
                }
                else
                {
                    line = line + "".PadLeft(curWord.intendSize) + curWord.word;
                }
                if (nextWord.isNewLine || l == writeWords.Count() - 1)
                {
                    writer(line);
                    line = "";
                }
            }

            /*foreach (var t in words)
             * {
             *  string line = t.Key + "." + t.Value;
             *  writer(line);
             * }*/
        }
Exemple #4
0
        /// <summary>
        /// Обработка слов
        /// </summary>
        /// <param name="startIndex">Индекс начала</param>
        /// <param name="endIndex">Индекс конца</param>
        /// <param name="WrWordIndex">Индекс слова для записи</param>
        private void Process(int startIndex, int endIndex, int WrWordIndex)
        {
            int        ids         = 0;                // размер отступа
            int        insertIndex = -1;               // индекс вставки текущего слова
            List <int> caseIds     = new List <int>(); // отступы для вложенных case
            int        curCaseIds  = -1;               // текуший отступ для case
            bool       isWith      = false;            // признак того, что запрос вынесен в with
            string     prevWordSt  = "";               // предыдущее от startIndex слово
            string     nextWordSt  = "";               // следующее от startIndex слово

            if (startIndex != 0)
            {
                prevWordSt = words[startIndex - 1];
            }
            if (startIndex != words.Count() - 1)
            {
                nextWordSt = words[startIndex + 1];
            }

            if (WrWordIndex >= 0)
            {
                WriteWord tmpW = writeWords[WrWordIndex];
                if (tmpW.isNewLine)
                {
                    ids = writeWords[WrWordIndex].intendSize;
                }
                else
                {
                    ids = CalcIntendSize(WrWordIndex) + 1; // Добавляем единицу из-за открывающей скобки
                }
                writeWords.RemoveAt(WrWordIndex);
                insertIndex = WrWordIndex - 1;
            }

            for (int i = startIndex; i < endIndex; i++)
            {
                if (WrWordIndex >= 0)
                {
                    insertIndex = insertIndex + 1;
                }
                string prevWord = "";
                string nextWord = "";
                string curWord  = words[i];

                if (i != 0)
                {
                    prevWord = words[i - 1];
                }
                if (i != words.Count() - 1)
                {
                    nextWord = words[i + 1];
                }


                if (curWord.Equals("(", cmp))
                {
                    if (WrWordIndex >= 0 && startIndex == i)
                    {
                        if (parNextLineWords.Where(x => x.Equals(prevWord, cmp)).Count() > 0)
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = ids, isNewLine = true
                            });
                            ids += 1;
                        }
                        else
                        {
                            if (parSpaceWords.Where(x => x.Equals(prevWord, cmp)).Count() > 0)
                            {
                                AddWord(insertIndex, new WriteWord {
                                    word = curWord, intendSize = 1, isNewLine = false
                                });
                            }
                            else
                            {
                                AddWord(insertIndex, new WriteWord {
                                    word = curWord, intendSize = 0, isNewLine = false
                                });
                            }
                        }
                    }
                    else
                    {
                        Parenthese par = parentheses.Where(p => p.left == i).First();
                        if (parNextLineWords.Where(x => x.Equals(prevWord, cmp)).Count() > 0)
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = par.repl_str, intendSize = ids, isNewLine = true
                            });
                        }
                        else
                        {
                            if (parSpaceWords.Where(x => x.Equals(prevWord, cmp)).Count() > 0)
                            {
                                AddWord(insertIndex, new WriteWord {
                                    word = par.repl_str, intendSize = 1, isNewLine = false
                                });
                            }
                            else
                            {
                                AddWord(insertIndex, new WriteWord {
                                    word = par.repl_str, intendSize = 0, isNewLine = false
                                });
                            }
                        }
                        i = par.right;
                    }

                    continue;
                }

                // комментарий. Пока пропускаем
                if (curWord.StartsWith("tnemmoc"))
                {
                    int t = 1 + 1;
                }

                if (curWord.Equals("union", cmp))
                {
                    ids -= 2;
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = ids, isNewLine = true
                    });
                    continue;
                }

                if (curWord.Equals("with", cmp))
                {
                    if (prevWord.Equals("start"))
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = 1, isNewLine = false
                        });
                    }
                    else
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = ids, isNewLine = true
                        });
                        ids   += 2;
                        isWith = true;
                    }

                    continue;
                }

                if (curWord.Equals("select", cmp))
                {
                    if (isWith)
                    {
                        ids   -= 2;
                        isWith = false;
                    }

                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = ids, isNewLine = true
                    });
                    ids += 2;
                    continue;
                }

                if (curWord.Equals("from", cmp))
                {
                    if (WrWordIndex >= 0 && fromFunctions.Where(x => x.Equals(prevWordSt, cmp)).Count() > 0)
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = 1, isNewLine = false
                        });
                    }
                    else
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = ids - 2, isNewLine = true
                        });
                    }
                    continue;
                }

                if (joinTypes.Where(x => x.Equals(curWord, cmp)).Count() > 0 &&
                    joinTypes.Where(x => x.Equals(prevWord, cmp)).Count() == 0)
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = ids - 2, isNewLine = true
                    });
                    continue;
                }

                if (curWord.Equals("join", cmp) && joinTypes.Where(x => x.Equals(prevWord, cmp)).Count() == 0)
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = ids - 2, isNewLine = true
                    });
                    continue;
                }

                if (curWord.Equals("where", cmp))
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = ids - 2, isNewLine = true
                    });
                    continue;
                }

                if (curWord.Equals("connect", cmp))
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = ids - 2, isNewLine = true
                    });
                    continue;
                }

                if (curWord.Equals("start", cmp))
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = ids - 2, isNewLine = true
                    });
                    continue;
                }

                if (curWord.Equals("case", cmp))
                {
                    if (WrWordIndex >= 0)
                    {
                        if (prevWord.Equals("("))
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = 0, isNewLine = false
                            });
                            curCaseIds = CalcIntendSize(insertIndex);
                        }
                        else
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = 1, isNewLine = false
                            });
                            curCaseIds = CalcIntendSize(insertIndex);
                        }
                    }
                    else
                    {
                        if (prevWord.Equals("("))
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = 0, isNewLine = false
                            });
                            curCaseIds = CalcIntendSize(writeWords.Count() - 1);
                        }
                        else
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = 1, isNewLine = false
                            });
                            curCaseIds = CalcIntendSize(writeWords.Count() - 1);
                        }
                    }

                    caseIds.Add(curCaseIds);
                    continue;
                }

                if (curWord.Equals("when", cmp) || curWord.Equals("else", cmp))
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = curCaseIds + 2, isNewLine = true
                    });
                    continue;
                }

                if (curWord.Equals("then", cmp) || prevWord.Equals("else", cmp))
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = curCaseIds + 4, isNewLine = true
                    });
                    continue;
                }

                if (curWord.Equals("end", cmp))
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = curCaseIds, isNewLine = true
                    });
                    caseIds.RemoveAt(caseIds.Count() - 1);
                    if (caseIds.Count() > 0)
                    {
                        curCaseIds = caseIds.Last();
                    }
                    else
                    {
                        curCaseIds = -1;
                    }
                    continue;
                }

                if (curWord.Equals("group", cmp))
                {
                    if (prevWord.Equals("within", cmp))
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = 1, isNewLine = false
                        });
                    }
                    else
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = ids - 2, isNewLine = true
                        });
                    }
                    continue;
                }

                if (curWord.Equals("order", cmp))
                {
                    if (WrWordIndex >= 0 && (prevWordSt.Equals("group", cmp)))
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = 0, isNewLine = false
                        });
                    }
                    else
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = ids - 2, isNewLine = true
                        });
                    }
                    continue;
                }

                if (WrWordIndex >= 0 && fromFunctions.Where(x => x.Equals(prevWordSt, cmp)).Count() > 0)
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = 1, isNewLine = false
                    });
                    continue;
                }

                if (curWord.Equals("by", cmp) || curWord.Equals("sets", cmp))
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = 1, isNewLine = false
                    });
                    continue;
                }

                if (curWord.Equals("and", cmp) || curWord.Equals("or", cmp))
                {
                    if (curCaseIds >= 0)
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = curCaseIds + 7, isNewLine = true
                        });
                    }
                    else
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = ids, isNewLine = true
                        });
                    }
                    continue;
                }

                if (curWord.Equals(","))
                {
                    if (WrWordIndex < 0)
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = ids, isNewLine = true
                        });
                        continue;
                    }

                    if (WrWordIndex > 0)
                    {
                        if (nextWordSt.Equals("select", cmp) || prevWordSt.Equals("by", cmp))
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = ids, isNewLine = true
                            });
                        }
                        else
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = 0, isNewLine = false
                            });
                        }
                        continue;
                    }
                }

                if (prevWord.Equals("on", cmp))
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = ids, isNewLine = true
                    });
                    continue;
                }

                if (prevWords.Where(x => x.Equals(prevWord, cmp)).Count() > 0)
                {
                    if (WrWordIndex >= 0 && fromFunctions.Where(x => x.Equals(prevWordSt, cmp)).Count() > 0)
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = 1, isNewLine = false
                        });
                    }
                    else
                    {
                        if (prevWord.Equals("by", cmp) && parGroupWords.Where(x => x.Equals(curWord, cmp)).Count() > 0)
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = 1, isNewLine = false
                            });
                        }
                        else
                        {
                            AddWord(insertIndex, new WriteWord {
                                word = curWord, intendSize = ids, isNewLine = true
                            });
                        }
                    }
                    continue;
                }
                else if (WrWordIndex >= 0 && prevWord.Equals("("))
                {
                    if (nextWordSt.Equals("select", cmp) && prevWordSt.Equals("where", cmp))
                    {
                        ids += 1;
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = ids, isNewLine = true
                        });
                    }
                    else
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = 0, isNewLine = false
                        });
                    }
                    continue;
                }
                else if (WrWordIndex >= 0 && curWord.Equals(")", cmp))
                {
                    if (prevWordSt.Equals("from", cmp) || prevWordSt.Equals("as", cmp) || prevWordSt.Equals("select", cmp))
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = writeWords[startIndex].intendSize, isNewLine = true
                        });
                    }
                    else if (nextWordSt.Equals("select", cmp) &&
                             !(prevWordSt.Equals("from", cmp) || prevWordSt.Equals("where", cmp) || prevWordSt.Equals("select", cmp)))
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = CalcIntendSize(startIndex), isNewLine = true
                        });
                    }
                    else
                    {
                        AddWord(insertIndex, new WriteWord {
                            word = curWord, intendSize = 0, isNewLine = false
                        });
                    }
                    continue;
                }
                else
                {
                    AddWord(insertIndex, new WriteWord {
                        word = curWord, intendSize = 1, isNewLine = false
                    });
                }
            }
        }
Exemple #5
0
 /// <summary>
 /// Добавить слово в заданное место
 /// </summary>
 /// <param name="index">Индекс месторасположения</param>
 /// <param name="word">Слово</param>
 private void AddWordAfter(int index, WriteWord word)
 {
     writeWords.Insert(index, word);
 }
Exemple #6
0
 /// <summary>
 /// Добавить слово в конец списка
 /// </summary>
 /// <param name="word">Слово</param>
 private void AddWordAtEnd(WriteWord word)
 {
     writeWords.Add(word);
 }