Example #1
0
 /// <summary>
 ///   指定ファイルからテーブル定義を読み取る
 /// </summary>
 public void Load(string xmlfile_)
 {
     xmlfile = xmlfile_;
     columns = new DBColumnDef[0];
     try {
         using (XmlFile xml = new XmlFile(xmlfile, "table")) {
             XmlElement root = xml.Root;
             name    = root.GetAttribute("name");
             expr    = root.GetAttribute("expr");
             note    = XmlFile.GetText(root, false).Trim();
             owner   = root.GetAttribute("owner");
             orgName = root.GetAttribute("orgname");
             foreach (XmlElement el in xml.GetElements(root, "column"))
             {
                 DBColumnDef coldef = new DBColumnDef(el);
                 coldef.ByteSize = StringUtil.ToInt(el.GetAttribute("bytesize"), 0);
                 coldef.OrgName  = el.GetAttribute("orgname");
                 AddColumn(coldef);
             }
             foreach (XmlElement el in xml.GetElements(root, "index"))
             {
                 AddIndex(new DBIndexDef(xml, el));
             }
             xml.Close();
         }
     } catch (XmlException e) {
         throw new XmlException(String.Format("XMLファイル({0})の読み取りに失敗しました: {1}", xmlfile, e.Message));
     }
 }
Example #2
0
        private static string paramString(DBColumnDef col)
        {
            switch (col.Type)
            {
            case "NUMBER":
            case "BOOLEAN":
                return(NumberParamWord);

            default:
                return("'" + StringParamWord + "'");
            }
        }
Example #3
0
        /// <summary>
        ///   簡易設定
        /// </summary>
        /// <remarks>
        ///   <para>
        ///     指定したカラム定義に沿って標題と条件式を自動生成する
        ///   </para>
        /// </remarks>
        public void Setup(DBColumnDef col)
        {
            DBCondition.Code code;
            int width;

            switch (col.Type)
            {
            case "NUMBER":
                code  = DBCondition.Code.Between;
                width = col.Length;
                break;

            case "BOOLEAN":
                code  = DBCondition.Code.Equals;
                width = col.Length;
                break;

            case "DATETIME":
                code  = DBCondition.Code.Between;
                width = 19;
                break;

            case "DATE":
                code  = DBCondition.Code.Between;
                width = 10;
                break;

            case "TIME":
                code  = DBCondition.Code.Between;
                width = 8;
                break;

            case "VARCHAR":
                if (col.Length >= 20)
                {
                    code = DBCondition.Code.Contains;
                }
                else
                {
                    code = DBCondition.Code.Equals;
                }
                width = col.Length;
                break;

            default:
                code  = DBCondition.Code.Equals;
                width = col.Length;
                break;
            }
            Setup(col, code);
            SetParamLength((width > 24)?24:width);
        }
Example #4
0
 /// <summary>
 ///   カラム追加
 /// </summary>
 public void AddColumn(DBColumnDef col)
 {
     if (columns == null)
     {
         columns    = new DBColumnDef[1];
         columns[0] = col;
         return;
     }
     DBColumnDef[] newcolumns = new DBColumnDef[columns.Length + 1];
     for (int i = 0; i < columns.Length; i++)
     {
         newcolumns[i] = columns[i];
     }
     newcolumns[newcolumns.Length - 1] = col;
     columns = newcolumns;
 }
Example #5
0
        /// <summary>
        ///   コンバートする
        /// </summary>
        public int Convert(string a5erfile, string outdir)
        {
            if (!Directory.Exists(outdir))
            {
                Directory.CreateDirectory(outdir);
            }
            int count = 0;

            using (StreamReader sr = FileUtil.Reader(a5erfile, Encoding.UTF8)) {
                if (sr == null)
                {
                    throw new IOException("Can't open " + a5erfile + " for reading");
                }
                Regex      pat_type = new Regex(@"^[\*@]?(\w+)(\(([0-9,]+)\))?$");
                DBTableDef tabledef = null;
                string     line;
                while ((line = sr.ReadLine()) != null)
                {
                    line = line.Trim();
                    if (line.StartsWith("[") && line.EndsWith("]"))
                    {
                        if ((tabledef != null) && (tabledef.Columns != null))
                        {
                            tabledef.SaveAs(Path.Combine(outdir, tabledef.XmlFileName));
                            count++;
                        }
                        tabledef = null;
                    }
                    if (line == "[Entity]")
                    {
                        tabledef = new DBTableDef();
                        continue;
                    }
                    if (tabledef == null)
                    {
                        continue;
                    }
                    string[] kv = line.Split("=".ToCharArray(), 2);
                    if (kv.Length < 2)
                    {
                        continue;
                    }
                    switch (kv[0])
                    {
                    case "PName":
                        tabledef.Id   = kv[1];
                        tabledef.Name = kv[1];
                        break;

                    case "LName":
                        tabledef.Expr = kv[1];
                        break;

                    case "Comment":
                        tabledef.Note = kv[1].Replace(@"\n", "\n");
                        break;

                    case "Field":
                    {
                        string[] x = StringUtil.SplitCSV(kv[1]);
                        if (x.Length < 7)
                        {
                            throw new Exception("Invalid Field declaration.");
                        }
                        Match mo = pat_type.Match(x[2]);
                        if (!mo.Success)
                        {
                            throw new Exception("Invalid type declaration");
                        }
                        string type       = mo.Groups[1].Value;
                        int    length     = 0;
                        int    fractional = 0;
                        if (mo.Groups[2].Success)
                        {
                            string[] xx = mo.Groups[3].Value.Split(",".ToCharArray());
                            if (xx.Length < 2)
                            {
                                length     = StringUtil.ToInt(xx[0]);
                                fractional = 0;
                            }
                            else
                            {
                                length     = StringUtil.ToInt(xx[0]);
                                fractional = StringUtil.ToInt(xx[1]);
                            }
                        }
                        DBColumnDef coldef = new DBColumnDef(x[1],       // Name
                                                             type, length, fractional,
                                                             x[3] == "", // Nullable
                                                             x[4] != "", // PK
                                                             x[5]);
                        coldef.Expr = x[0];
                        coldef.Note = x[6].Replace(@"\n", "\n");
                        tabledef.AddColumn(coldef);
                    }
                    break;

                    case "Index":
                    {
                        kv = kv[1].Split("=".ToCharArray(), 2);
                        if (kv.Length < 2)
                        {
                            throw new Exception("Invalid Index declaration.");
                        }
                        string[] x = StringUtil.SplitCSV(kv[1]);
                        if (x.Length < 2)
                        {
                            throw new Exception("Invalid Index declaration..");
                        }
                        string[] columns = new string[x.Length - 1];
                        for (int i = 0; i < x.Length - 1; i++)
                        {
                            columns[i] = x[i + 1];
                        }
                        DBIndexDef inddef = new DBIndexDef(columns, x[0] == "1");
                        tabledef.AddIndex(inddef);
                    }
                    break;
                    }
                }
                if ((tabledef != null) && (tabledef.Columns != null))
                {
                    tabledef.SaveAs(Path.Combine(outdir, tabledef.XmlFileName));
                    count++;
                }
                sr.Close();
            }
            return(count);
        }
Example #6
0
        /// <summary>
        ///   簡易設定(条件コードを指定するバージョン)
        /// </summary>
        /// <remarks>
        ///   <para>
        ///     指定したカラム定義に沿って標題と条件式を自動生成する
        ///   </para>
        /// </remarks>
        public void Setup(DBColumnDef col, Code code)
        {
            title = col.Name + "が" + CodeName(code);
            expr  = col.Name + " ";
            switch (code)
            {
            case Code.Equals:
                expr += "= " + paramString(col);
                break;

            case Code.NotEquals:
                expr += "<> " + paramString(col);
                break;

            case Code.Contains:
                expr += "LIKE '%" + StringParamWord + "%'";
                break;

            case Code.NotContains:
                expr += "NOT LIKE '%" + StringParamWord + "%'";
                break;

            case Code.StartsWith:
                expr += "LIKE '" + StringParamWord + "%'";
                break;

            case Code.EndsWith:
                expr += "LIKE '%" + StringParamWord + "'";
                break;

            case Code.GreaterOrEqual:
                expr += ">= " + paramString(col);
                break;

            case Code.GreaterThan:
                expr += "> " + paramString(col);
                break;

            case Code.LessOrEqual:
                expr += "<= " + paramString(col);
                break;

            case Code.LessThan:
                expr += "< " + paramString(col);
                break;

            case Code.Between:
                expr += "BETWEEN " + paramString(col) + " AND " + paramString(col);
                break;

            case Code.NotBetween:
                expr += "NOT BETWEEN " + paramString(col) + " AND " + paramString(col);
                break;

            case Code.In:
                expr += "IN (" + paramString(col) + "," + paramString(col) + "," + paramString(col) + "," + paramString(col) + ")";
                break;

            case Code.NotIn:
                expr += "NOT IN (" + paramString(col) + "," + paramString(col) + "," + paramString(col) + "," + paramString(col) + ")";
                break;

            case Code.CollateEquals:
                expr += "= " + paramString(col) + " COLLATE utf8_unicode_ci";
                break;

            case Code.NotCollateEquals:
                expr += "<> " + paramString(col) + " COLLATE utf8_unicode_ci";
                break;

            case Code.CollateContains:
                expr += "LIKE '%" + StringParamWord + "%' COLLATE utf8_unicode_ci";
                break;

            case Code.NotCollateContains:
                expr += "NOT LIKE '%" + StringParamWord + "%' COLLATE utf8_unicode_ci";
                break;

            case Code.CollateStartsWith:
                expr += "LIKE '" + StringParamWord + "%' COLLATE utf8_unicode_ci";
                break;

            case Code.CollateEndsWith:
                expr += "LIKE '%" + StringParamWord + "' COLLATE utf8_unicode_ci";
                break;

            default:
                expr += "IS NOT NULL"; // 適当
                break;
            }
            setExpr(expr);
            int len = col.Length + 1;

            if (len < 3)
            {
                len = 3;
            }
            if (len > 40)
            {
                len = 40;
            }
            SetParamLength(len);
        }
Example #7
0
 /// <summary>
 ///   簡易設定コンストラクタ
 /// </summary>
 public DBCondition(DBColumnDef col, Code code)
 {
     Setup(col, code);
 }
Example #8
0
 /// <summary>
 ///   簡易設定コンストラクタ
 /// </summary>
 public DBCondition(DBColumnDef col)
 {
     Setup(col);
 }