Exemplo n.º 1
0
        /// <summary>
        /// Returns table by use command.
        /// </summary>
        /// <param name="usecommand">Use command.</param>
        public MochaTableResult GetTable(string usecommand, bool from)
        {
            var columns     = new List <MochaColumn>();
            var resulttable = new MochaTableResult();

            if (from)
            {
                var dex       = usecommand.IndexOf("FROM", StringComparison.OrdinalIgnoreCase);
                var tablename = usecommand.Substring(dex + 4).TrimStart().TrimEnd();
                var parts     = usecommand.Substring(0, dex).Split(',');

                var table = Tdb.GetTable(tablename);

                if (parts.Length == 1 && parts[0].Trim() == "*")
                {
                    columns.AddRange(table.Columns);
                }
                else
                {
                    for (var index = 0; index < parts.Length; index++)
                    {
                        var callcmd = parts[index].Trim();
                        var name    = Mhql_AS.GetAS(ref callcmd);
                        var column  = table.Columns[callcmd];
                        column.Name = name;
                        columns.Add(column);
                    }
                }
            }
            else
            {
                var parts = usecommand.Split(',');
                for (var index = 0; index < parts.Length; index++)
                {
                    var callcmd = parts[index].Trim();
                    if (callcmd == "*")
                    {
                        var tables = Tdb.GetTables();
                        for (int tindex = 0; tindex < tables.Count; tindex++)
                        {
                            columns.AddRange(tables[tindex].Columns);
                        }
                        continue;
                    }

                    var callparts = callcmd.Split('.');
                    if (callparts.Length > 2)
                    {
                        throw new MochaException($"'{callcmd}' command is cannot processed!");
                    }
                    for (byte partindex = 0; partindex < callparts.Length; partindex++)
                    {
                        callparts[partindex] = callparts[partindex].Trim();
                    }
                    var table = Tdb.GetTable(callparts[0]);
                    if (callparts.Length == 1)
                    {
                        columns.AddRange(table.Columns);
                    }
                    else
                    {
                        var callp1 = callparts[1];
                        var name   = Mhql_AS.GetAS(ref callp1);
                        var column = table.Columns[callp1];
                        column.Name = name;
                        columns.Add(column);
                    }
                }
            }

            resulttable.Columns = columns.ToArray();
            resulttable.SetRowsByDatas();

            return(resulttable);
        }