//Конструктор internal FunOverload(FunCompile fun, //Функция-владелец IRecordRead rec) //Рекордсет с таблицей FunctionsOverloads { _arrayType = rec.GetString("ResultArray").ToArrayType(); Code = fun.Code + "_"; for (int i = 1; i <= 9; ++i) { var dtype = rec.GetString("Operand" + i); if (dtype.IsEmpty()) { break; } string atype = i == 1 ? rec.GetString("Operand1Array") : ""; var fp = new FunParam(dtype, atype, rec.GetString("Default" + i)); _inputs.Add(fp); Code += fp.DataType.ToLetter(); } for (int i = 1; i <= 2; ++i) { var dtype = rec.GetString("More" + i); if (dtype.IsEmpty()) { break; } var fp = new FunParam(dtype); _inputsMore.Add(fp); Code += fp.DataType.ToLetter(); } var s = rec.GetString("Result"); var dt = s.ToDataType(); _isCombined = dt == DataType.Error; if (!_isCombined) { _resultType = dt; } else { var p = s.Split('+'); foreach (string c in p) { if (c == "M1") { _inputsMore[0].UsedInResult = true; } else if (c == "M2") { _inputsMore[1].UsedInResult = true; } else { _inputs[int.Parse(c) - 1].UsedInResult = true; } } } }
public FunsChecker(FunsCheckType listType) { try { bool isGenerate = listType == FunsCheckType.Gen; using (var db = new DaoDb(ItStatic.InfoTaskDir() + @"General\General.accdb")) { var funsId = new DicI <FunCompile>(); var where = " WHERE (Functions.IsCompile = True)" + (isGenerate ? "AND (Functions.IsGen = True) " : " "); using (var rec = new AdoReader(db, "SELECT * FROM Functions" + where)) while (rec.Read()) { var f = new FunCompile(rec); funsId.Add(f.Id, f); _funs.Add(f.Name, f); if (!f.Synonym.IsEmpty()) { _funs.Add(f.Synonym, f); } } using (var rec = new AdoReader(db, "SELECT FunctionsOverloads.* FROM Functions INNER JOIN FunctionsOverloads ON Functions.Id = FunctionsOverloads.FunctionId " + where + "ORDER BY FunctionsOverloads.FunctionId, FunctionsOverloads.RunNumber")) { rec.Read(); while (!rec.EOF) { var id = rec.GetInt("FunctionId"); var fun = funsId[id]; while (rec.GetInt("FunctionId") == id) { fun.Overloads.Add(new FunOverload(fun, rec)); if (!rec.Read()) { break; } } } } using (var rec = new AdoReader(db, "SELECT * FROM ParamProps")) while (rec.Read()) { var dt = rec.GetString("DataType").ToDataType(); ParamProps.Add(rec.GetString("EnglishCode"), dt); ParamProps.Add(rec.GetString("RussianCode"), dt); } } } catch (Exception ex) { ex.MessageError("Системная ошибка компилятора. Ошибка загрузки функций"); } }