示例#1
0
        public static SplitingLine Find(List <SplitingLine> inputText, SplitingLine inputLine)
        {
            SplitingLine outputLine = inputLine;

            outputLine.Comments = new List <SplitingLine.CommentFrom>();
            if (inputLine.Comment == FileLine.DefaultCommentString)
            {
                foreach (SplitingLine line in inputText)
                {
                    if (line.Column == inputLine.Column && line.Table != inputLine.Table && line.Comment != FileLine.DefaultCommentString)
                    {
                        if (!inputLine.Comments.Exists(x => x.Value == line.Comment))
                        {
                            SplitingLine.CommentFrom comment = new SplitingLine.CommentFrom()
                            {
                                Value = line.Comment,
                                Table = line.Table
                            };
                            outputLine.Comments.Add(comment);
                        }
                    }
                }
            }
            return(outputLine);
        }
示例#2
0
        public static string JoinLine(SplitingLine inputLine, out List <CommentFrom> comments)
        {
            comments = new List <CommentFrom>();
            if (inputLine.Comments != null)
            {
                comments = inputLine.Comments;
            }

            string result;

            if (inputLine.Column == null)
            {
                result = inputLine.Base + '.' + inputLine.Table;
            }
            else
            {
                result = inputLine.Base + '.' + inputLine.Table + '.' + inputLine.Column;
            }

            return(result);
        }
示例#3
0
        public static List <SplitingLine> ConvertSqlToTxt(List <string> file)
        {
            List <string>       newText         = new List <string>();
            List <SplitingLine> newSplitingText = new List <SplitingLine>();

            file.RemoveAll(x => Regex.IsMatch(x, "^--") || x == "");
            int fileRange = file.Count;

            for (int i = 0; i < fileRange; i += 2)
            {
                string line    = file[i].Replace("comment on column ", "").Replace("comment on table ", "");
                string comment = file[i + 1].Replace("is '", "").Replace("';", "");
                newSplitingText.Add(SplitingLine.SplitLine(line, comment));
            }

            List <SplitingLine> newSplitingTextWithComments = new List <SplitingLine>();

            foreach (var line in newSplitingText)
            {
                newSplitingTextWithComments.Add(CommentSearch.Find(newSplitingText, line));
            }

            return(newSplitingTextWithComments);
        }
示例#4
0
        /// <summary>
        /// Сформировать строки sql файла из txt с комментариями
        /// </summary>
        /// <param name="file">Список строк из файла txt с комментариями</param>
        /// <returns>Список строк файла sql</returns>
        public static List <string> ConvertTxtToSql(List <SplitingLine> file)
        {
            List <string> newText   = new List <string>();  //новый текст
            List <string> tableList = new List <string>();  //список таблиц

            tableList.Add("--Список таблиц:");

            bool tableSectionEnd = false;

            FileLine fileLine = new FileLine();

            foreach (var splitLine in file)
            {
                List <SplitingLine.CommentFrom> comments;
                tableSectionEnd = splitLine.Column != null;
                string line = SplitingLine.JoinLine(splitLine, out comments);
                fileLine.CurrLine = line;
                switch (line)
                {
                case "Таблицы:":
                    string newLine = "-- " + line;
                    newText.Add(newLine);
                    break;

                case "Колонки:":
                    tableSectionEnd = true;
                    newLine         = "-- " + line;
                    newText.Add(newLine);
                    break;

                case "":
                    newText.Add(line);
                    break;

                default:
                    if (tableSectionEnd)
                    {
                        string tableName;
                        if (fileLine.IsNew(out tableName))
                        {
                            tableList.Add("-- " + tableName);
                            newText.Add("-- Таблица " + tableName);
                        }
                        if (splitLine.Comments.Count == 0)
                        {
                            newLine = String.Format("comment on column " + line + "\nis '{0}';", splitLine.Comment);
                        }
                        else
                        {
                            string commentList = "";
                            if (splitLine.Comments.Count > 1)
                            {
                                commentList += "\n-- Несколько вариантов:";
                            }
                            foreach (var comment in splitLine.Comments)
                            {
                                commentList += String.Format("\n-- Из таблицы {1} \nis '{0}';", comment.Value, comment.Table);
                            }

                            newLine = "comment on column " + line + commentList;
                        }
                        newText.Add(newLine);
                    }
                    else
                    {
                        newLine = "comment on table " + line + "\nis 'TEXT';";
                        newText.Add(newLine);
                    }
                    break;
                }
            }

            tableList.Add("");
            tableList.AddRange(newText);

            //string writePath = readPath.Replace(".txt", ".sql");

            /*
             * using (StreamWriter sw = new StreamWriter(writePath, false, Encoding.Default))
             * {
             *  foreach (string line in tableList)
             *      sw.WriteLine(line);
             *  sw.WriteLine("");
             *  foreach (string line in newText)
             *      sw.WriteLine(line);
             * }
             * return "Готово";
             */
            return(tableList);
        }