private static void FillMethodsTable(ValueTable.ValueTable result, IEnumerable <MethodInfo> methods) { var nameColumn = result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var countColumn = result.Columns.Add("КоличествоПараметров", TypeDescription.IntegerType(), "Количество параметров"); var isFunctionColumn = result.Columns.Add("ЭтоФункция", TypeDescription.BooleanType(), "Это функция"); var annotationsColumn = result.Columns.Add("Аннотации", new TypeDescription(), "Аннотации"); var paramsColumn = result.Columns.Add("Параметры", new TypeDescription(), "Параметры"); foreach (var methInfo in methods) { if (!methInfo.IsExport) { continue; } ValueTableRow new_row = result.Add(); new_row.Set(nameColumn, ValueFactory.Create(methInfo.Name)); new_row.Set(countColumn, ValueFactory.Create(methInfo.ArgCount)); new_row.Set(isFunctionColumn, ValueFactory.Create(methInfo.IsFunction)); if (methInfo.AnnotationsCount != 0) { new_row.Set(annotationsColumn, CreateAnnotationTable(methInfo.Annotations)); } var paramTable = new ValueTable.ValueTable(); var paramNameColumn = paramTable.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var paramByValue = paramTable.Columns.Add("ПоЗначению", TypeDescription.BooleanType(), "По значению"); var paramHasDefaultValue = paramTable.Columns.Add("ЕстьЗначениеПоУмолчанию", TypeDescription.BooleanType(), "Есть значение по-умолчанию"); var paramAnnotationsColumn = paramTable.Columns.Add("Аннотации", new TypeDescription(), "Аннотации"); new_row.Set(paramsColumn, paramTable); if (methInfo.ArgCount != 0) { var index = 0; foreach (var param in methInfo.Params) { var name = string.Format("param{0}", ++index); var paramRow = paramTable.Add(); paramRow.Set(paramNameColumn, ValueFactory.Create(name)); paramRow.Set(paramByValue, ValueFactory.Create(param.IsByValue)); paramRow.Set(paramHasDefaultValue, ValueFactory.Create(param.HasDefaultValue)); if (param.AnnotationsCount != 0) { paramRow.Set(paramAnnotationsColumn, CreateAnnotationTable(param.Annotations)); } } } } }
private static void FillMethodsTable(ValueTable.ValueTable result, IEnumerable <MethodInfo> methods) { var nameColumn = result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var countColumn = result.Columns.Add("КоличествоПараметров", TypeDescription.IntegerType(), "Количество параметров"); var isFunctionColumn = result.Columns.Add("ЭтоФункция", TypeDescription.BooleanType(), "Это функция"); foreach (var methInfo in methods) { ValueTableRow new_row = result.Add(); new_row.Set(nameColumn, ValueFactory.Create(methInfo.Name)); new_row.Set(countColumn, ValueFactory.Create(methInfo.ArgCount)); new_row.Set(isFunctionColumn, ValueFactory.Create(methInfo.IsFunction)); } }
private void FillPropertiesTable(ValueTable.ValueTable result, IEnumerable <VariableInfo> properties) { var nameColumn = result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var systemVarNames = new string[] { "этотобъект", "thisobject" }; foreach (var propInfo in properties) { if (systemVarNames.Contains(propInfo.Identifier.ToLower())) { continue; } ValueTableRow newRow = result.Add(); newRow.Set(nameColumn, ValueFactory.Create(propInfo.Identifier)); } }
public ValueTable.ValueTable GetMethodsTable(IRuntimeContextInstance target) { ValueTable.ValueTable Result = new ValueTable.ValueTable(); var NameColumn = Result.Columns.Add("Имя", ValueFactory.Create(""), "Имя"); // TODO: Доработать после увеличения предела количества параметров var CountColumn = Result.Columns.Add("КоличествоПараметров", ValueFactory.Create(""), "Количество параметров"); // TODO: Доработать после увеличения предела количества параметров var IsFunctionColumn = Result.Columns.Add("ЭтоФункция", ValueFactory.Create(""), "Это функция"); // TODO: Доработать после увеличения предела количества параметров foreach (var methInfo in target.GetMethods()) { ValueTableRow new_row = Result.Add(); new_row.Set(NameColumn, ValueFactory.Create(methInfo.Name)); new_row.Set(CountColumn, ValueFactory.Create(methInfo.ArgCount)); new_row.Set(IsFunctionColumn, ValueFactory.Create(methInfo.IsFunction)); } return(Result); }
public ValueTable.ValueTable GetMethodsTable(IRuntimeContextInstance target) { ValueTable.ValueTable Result = new ValueTable.ValueTable(); var NameColumn = Result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var CountColumn = Result.Columns.Add("КоличествоПараметров", TypeDescription.IntegerType(), "Количество параметров"); var IsFunctionColumn = Result.Columns.Add("ЭтоФункция", TypeDescription.BooleanType(), "Это функция"); foreach (var methInfo in target.GetMethods()) { ValueTableRow new_row = Result.Add(); new_row.Set(NameColumn, ValueFactory.Create(methInfo.Name)); new_row.Set(CountColumn, ValueFactory.Create(methInfo.ArgCount)); new_row.Set(IsFunctionColumn, ValueFactory.Create(methInfo.IsFunction)); } return(Result); }
private static void FillPropertiesTable(ValueTable.ValueTable result, IEnumerable <VariableInfo> properties) { var nameColumn = result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var annotationsColumn = result.Columns.Add("Аннотации", new TypeDescription(), "Аннотации"); var systemVarNames = new string[] { "этотобъект", "thisobject" }; foreach (var propInfo in properties) { if (systemVarNames.Contains(propInfo.Identifier.ToLower())) { continue; } ValueTableRow new_row = result.Add(); new_row.Set(nameColumn, ValueFactory.Create(propInfo.Identifier)); new_row.Set(annotationsColumn, propInfo.AnnotationsCount != 0 ? CreateAnnotationTable(propInfo.Annotations) : EmptyAnnotationsTable()); } }
public ValueTable.ValueTable GetPropertiesTable(IRuntimeContextInstance target) { ValueTable.ValueTable Result = new ValueTable.ValueTable(); var NameColumn = Result.Columns.Add("Имя", TypeDescription.StringType(), "Имя"); var SystemVarNames = new string[] { "этотобъект", "thisobject" }; foreach (var propInfo in target.GetProperties()) { if (SystemVarNames.Contains(propInfo.Identifier.ToLower())) { continue; } ValueTableRow new_row = Result.Add(); new_row.Set(NameColumn, ValueFactory.Create(propInfo.Identifier)); } return(Result); }
private TableMapping CreateAccountingRegisterTableMapping(ValueTableRow tableRow) { var queryTableName = tableRow.GetString("ИмяТаблицы"); if (string.IsNullOrEmpty(queryTableName)) { return(null); } var dbTableName = tableRow.GetString("ИмяТаблицыХранения"); if (string.IsNullOrEmpty(dbTableName)) { return(null); } var fieldsTable = new ValueTable(tableRow["Поля"]); var propertyMappings = new List <PropertyMapping>(); const string registratorPropertyName = "Регистратор"; const string valuePropertyName = "Значение"; propertyMappings.Add(new PropertyMapping(registratorPropertyName, null, CreateRegistratorLayout())); propertyMappings.Add(new PropertyMapping(valuePropertyName, null, CreateSubkontoLayout())); foreach (var fieldRow in fieldsTable) { var queryName = fieldRow.GetString("ИмяПоля"); if (queryName == registratorPropertyName || queryName == valuePropertyName) { continue; } var dbName = fieldRow.GetString("ИмяПоляХранения"); if (string.IsNullOrWhiteSpace(dbName)) { throw new InvalidOperationException("assertion failure"); } propertyMappings.Add(new PropertyMapping(queryName, new SingleLayout(dbName, null), null)); } return(new TableMapping(queryTableName, dbTableName, TableType.Main, propertyMappings.ToArray())); }
public QueryResult(DbDataReader reader) { for (int ColIdx = 0; ColIdx < reader.FieldCount; ColIdx++) { _resultTable.Columns.Add(reader.GetName(ColIdx)); } using (reader) { foreach (DbDataRecord record in reader) { ValueTableRow row = _resultTable.Add(); for (int ColIdx = 0; ColIdx < reader.FieldCount; ColIdx++) { if (record.IsDBNull(ColIdx)) { row.Set(ColIdx, ValueFactory.Create()); continue; } if (record.GetFieldType(ColIdx) == typeof(Int32)) { row.Set(ColIdx, ValueFactory.Create((int)record.GetValue(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(Int64)) { row.Set(ColIdx, ValueFactory.Create(record.GetInt64(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(Boolean)) { row.Set(ColIdx, ValueFactory.Create(record.GetBoolean(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(UInt64)) { row.Set(ColIdx, ValueFactory.Create(record.GetValue(ColIdx).ToString())); } if (record.GetFieldType(ColIdx) == typeof(System.Double)) { double val = record.GetDouble(ColIdx); row.Set(ColIdx, ValueFactory.Create(val.ToString())); } if (record.GetFieldType(ColIdx) == typeof(Single)) { float val = record.GetFloat(ColIdx); row.Set(ColIdx, ValueFactory.Create(val.ToString())); } if (record.GetFieldType(ColIdx) == typeof(Decimal)) { row.Set(ColIdx, ValueFactory.Create(record.GetDecimal(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(System.String)) { row.Set(ColIdx, ValueFactory.Create(record.GetString(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(System.DateTime)) { row.Set(ColIdx, ValueFactory.Create(record.GetDateTime(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(System.Byte[])) { var data = (byte[])record[ColIdx]; var newData = new BinaryDataContext(data); row.Set(ColIdx, ValueFactory.Create(newData)); } } } } }
private TableMapping CreateDefaultTableMapping(ValueTableRow tableRow, Dictionary <string, TableMapping> tableMappingByQueryName) { var queryTableName = tableRow.GetString("ИмяТаблицы"); if (string.IsNullOrEmpty(queryTableName)) { return(null); } var dbTableName = tableRow.GetString("ИмяТаблицыХранения"); if (string.IsNullOrEmpty(dbTableName)) { return(null); } var purpose = tableRow.GetString("Назначение"); ConfigurationItemDescriptor descriptor; object comObject; TableType tableType; if (purpose == "Основная" || purpose == "Константа") { var configurationName = ConfigurationName.ParseOrNull(queryTableName); if (!configurationName.HasValue) { return(null); } tableType = TableType.Main; descriptor = MetadataHelpers.GetDescriptorOrNull(configurationName.Value.Scope); if (descriptor == null) { comObject = null; } else { var configurationItem = globalContext.FindMetaByName(configurationName.Value); comObject = configurationItem.ComObject; } } else if (purpose == "ТабличнаяЧасть") { descriptor = MetadataHelpers.tableSectionDescriptor; var fullname = TableSectionQueryNameToFullName(queryTableName); comObject = ComHelpers.Invoke(globalContext.Metadata, "НайтиПоПолномуИмени", fullname); if (comObject == null) { return(null); } tableType = TableType.TableSection; } else { return(null); } var propertyDescriptors = comObject == null ? new Dictionary <string, string[]>() : MetadataHelpers.GetAttributes(comObject, descriptor) .ToDictionary(Call.Имя, GetConfigurationTypes); var propertyMappings = new ValueTable(tableRow["Поля"]) .Select(x => new { queryName = x.GetString("ИмяПоля"), dbName = x.GetString("ИмяПоляХранения") }) .Where(x => !string.IsNullOrEmpty(x.queryName)) .Where(x => !string.IsNullOrEmpty(x.dbName)) .GroupBy(x => x.queryName, (x, y) => new { queryName = x, columns = y.Select(z => z.dbName).ToArray() }, StringComparer.OrdinalIgnoreCase) .Select(x => { var propertyName = x.queryName.ExcludeSuffix("Кт").ExcludeSuffix("Дт"); var propertyTypes = propertyName == "Счет" ? new[] { "ПланСчетов.Хозрасчетный" } : propertyDescriptors.GetOrDefault(propertyName); if (propertyTypes == null || propertyTypes.Length == 1) { if (x.columns.Length != 1) { return(null); } var nestedTableName = propertyTypes == null ? null : propertyTypes[0]; var singleLayout = new SingleLayout(x.columns[0], nestedTableName); return(new PropertyMapping(x.queryName, singleLayout, null)); } var unionLayout = x.queryName == "Регистратор" ? new UnionLayout( null, GetColumnBySuffixOrNull("_RecorderTRef", x.columns), GetColumnBySuffixOrNull("_RecorderRRef", x.columns), propertyTypes) : new UnionLayout( GetColumnBySuffixOrNull("_type", x.columns), GetColumnBySuffixOrNull("_rtref", x.columns), GetColumnBySuffixOrNull("_rrref", x.columns), propertyTypes); return(new PropertyMapping(x.queryName, null, unionLayout)); }) .NotNull() .ToList(); if (tableType == TableType.TableSection) { if (!HasProperty(propertyMappings, PropertyNames.id)) { var refLayout = new SingleLayout(GetTableSectionIdColumnNameByTableName(dbTableName), null); propertyMappings.Add(new PropertyMapping(PropertyNames.id, refLayout, null)); } if (!HasProperty(propertyMappings, PropertyNames.area)) { var mainQueryName = TableMapping.GetMainQueryNameByTableSectionQueryName(queryTableName); TableMapping mainTableMapping; if (!tableMappingByQueryName.TryGetValue(mainQueryName, out mainTableMapping)) { return(null); } PropertyMapping mainAreaProperty; if (!mainTableMapping.TryGetProperty(PropertyNames.area, out mainAreaProperty)) { return(null); } propertyMappings.Add(mainAreaProperty); } } return(new TableMapping(queryTableName, dbTableName, tableType, propertyMappings.ToArray())); }
private TableMapping CreateAccountingRegisterTableMapping(ValueTableRow tableRow) { var queryTableName = tableRow.GetString("ИмяТаблицы"); if (string.IsNullOrEmpty(queryTableName)) { return(null); } var dbTableName = tableRow.GetString("ИмяТаблицыХранения"); if (string.IsNullOrEmpty(dbTableName)) { return(null); } var fieldsTable = new ValueTable(tableRow["Поля"]); var propertyMappings = new List <PropertyMapping>(); var subkontoCount = 0; foreach (var fieldRow in fieldsTable) { var queryName = fieldRow.GetString("ИмяПоля"); var dbName = fieldRow.GetString("ИмяПоляХранения"); if (string.IsNullOrWhiteSpace(dbName)) { throw new InvalidOperationException("assertion failure"); } if (dbName.EndsWith("_RTRef") || dbName.EndsWith("_RRRef")) { continue; } UnionLayout unionLauout = null; if (string.IsNullOrWhiteSpace(queryName)) { if (dbName == "_AccountRRef") { queryName = "Счет"; } else if (dbName == "_Period") { queryName = "Период"; } else if (dbName == "_Splitter") { queryName = "Разделитель"; } else if (dbName == "_Value1_TYPE") { queryName = "Субконто1"; unionLauout = CreateSubkontoLayout(1); subkontoCount++; } else if (dbName == "_Value2_TYPE") { queryName = "Субконто2"; unionLauout = CreateSubkontoLayout(2); subkontoCount++; } else if (dbName == "_Value3_TYPE") { queryName = "Субконто3"; unionLauout = CreateSubkontoLayout(3); subkontoCount++; } else { const string messageFormat = "unexpected empty query name for field, db name [{0}]"; throw new InvalidOperationException(string.Format(messageFormat, dbName)); } } SingleLayout singleLayout = null; if (unionLauout == null) { string nestedTableName; if (queryName == "Счет") { nestedTableName = "ПланСчетов.Хозрасчетный"; } else if (queryName == "Организация") { nestedTableName = "Справочник.Организации"; } else if (queryName == "Валюта") { nestedTableName = "Справочник.Валюты"; } else if (queryName == "Подразделение") { nestedTableName = "Справочник.ПодразделенияОрганизаций"; } else { nestedTableName = null; } singleLayout = new SingleLayout(dbName, nestedTableName); } if (dbName.ContainsIgnoringCase("Turnover")) { queryName += "Оборот"; if (dbName.Contains("Dt")) { queryName += "Дт"; } else if (dbName.Contains("Ct")) { queryName += "Кт"; } } propertyMappings.Add(new PropertyMapping(queryName, singleLayout, unionLauout)); } if (queryTableName == AccountingRegisterTables.subkontoName) { queryTableName += subkontoCount; } return(new TableMapping(queryTableName, dbTableName, TableType.Main, propertyMappings.ToArray())); }
public ValueTable RunQuery() { ValueTable tbl = new ValueTable(); OdbcCommand dbCommand = (OdbcCommand)dbСonnection.CreateCommand(); // Добавляем параметры в запрос string pattern = @"@[A-z0-9]*"; Regex regex = new Regex(pattern); Match match = regex.Match(QueryText); while (match.Success) { string currParam = match.Value; var currValue = parameters[currParam]; dbCommand.Parameters.AddWithValue(currParam, currValue); match = match.NextMatch(); } string prepareQuery = regex.Replace(QueryText, "?"); dbCommand.CommandText = prepareQuery; // Выполняем запрос IDataReader dbReader = dbCommand.ExecuteReader(); // Создаем ТаблицуЗначений в которую будем выводить результат запроса for (int i = 0; i < dbReader.FieldCount; i++) { string ColumnName = dbReader.GetName(i); tbl.Columns.Add(ColumnName); } while (dbReader.Read()) { for (int i = 0; i < dbReader.FieldCount; i++) { string ColumnName = dbReader.GetName(i); ValueTableRow row = tbl.Add(); var value = dbReader[ColumnName]; System.Type valueType = value.GetType(); if (valueType == typeof(int)) { row.Set(i, ValueFactory.Create((int)value)); } else if (valueType == typeof(Int16)) { row.Set(i, ValueFactory.Create((Int16)value)); } else if (valueType == typeof(Int32)) { row.Set(i, ValueFactory.Create((Int32)value)); } else if (valueType == typeof(string)) { row.Set(i, ValueFactory.Create((string)value)); } else if (valueType == typeof(DateTime)) { row.Set(i, ValueFactory.Create((DateTime)value)); } } } dbReader.Close(); dbReader = null; dbCommand.Dispose(); dbCommand = null; return(tbl); }
public ValueTable Unload() { ValueTable resultTable = new ValueTable(); for (int ColIdx = 0; ColIdx < _reader.FieldCount; ColIdx++) { resultTable.Columns.Add(_reader.GetName(ColIdx)); } foreach (DbDataRecord record in _reader) { ValueTableRow row = resultTable.Add(); for (int ColIdx = 0; ColIdx < _reader.FieldCount; ColIdx++) { if (record.IsDBNull(ColIdx)) { row.Set(ColIdx, ValueFactory.Create()); continue; } //Console.WriteLine("queryresult-col-type:" + record.GetFieldType(ColIdx).ToString() + "::" + record.GetDataTypeName(ColIdx)); if (record.GetFieldType(ColIdx) == typeof(Int32)) { row.Set(ColIdx, ValueFactory.Create((int)record.GetValue(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(Int64)) { row.Set(ColIdx, ValueFactory.Create(record.GetInt64(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(Boolean)) { row.Set(ColIdx, ValueFactory.Create(record.GetBoolean(ColIdx))); } if (record.GetFieldType(ColIdx) == typeof(UInt64)) { row.Set(ColIdx, ValueFactory.Create(record.GetValue(ColIdx).ToString())); } if (record.GetFieldType(ColIdx).ToString() == "System.Double") { double val = record.GetDouble(ColIdx); row.Set(ColIdx, ValueFactory.Create(val.ToString())); } if (record.GetFieldType(ColIdx) == typeof(Single)) { float val = record.GetFloat(ColIdx); row.Set(ColIdx, ValueFactory.Create(val.ToString())); } if (record.GetFieldType(ColIdx) == typeof(Decimal)) { row.Set(ColIdx, ValueFactory.Create(record.GetDecimal(ColIdx))); } if (record.GetFieldType(ColIdx).ToString() == "System.String") { row.Set(ColIdx, ValueFactory.Create(record.GetString(ColIdx))); } if (record.GetFieldType(ColIdx).ToString() == "System.DateTime") { row.Set(ColIdx, ValueFactory.Create(record.GetDateTime(ColIdx))); } if (record.GetFieldType(ColIdx).ToString() == "System.Byte[]") { var data = (byte[])record[ColIdx]; var newData = new BinaryDataContext(data); row.Set(ColIdx, ValueFactory.Create(newData)); } } } _reader.Close(); return(resultTable); }