/// <summary>
        /// This method gets the StrLenNullMap from a DataFrameColumn Column.
        /// </summary>
        private int[] GetStrLenNullMap(DataFrameColumn column)
        {
            int[] colMap = new int[column.Length];
            _handleList.Add(GCHandle.Alloc(colMap, GCHandleType.Pinned));
            for (int rowNumber = 0; rowNumber < column.Length; ++rowNumber)
            {
                if (column[rowNumber] != null)
                {
                    if (!DataTypeMap.ContainsKey(column.DataType))
                    {
                        throw new NotImplementedException("Parameter type for " + column.DataType.ToString() + " has not been implemented yet");
                    }

                    SqlDataType dataType = DataTypeMap[column.DataType];
                    switch (dataType)
                    {
                    case SqlDataType.DotNetChar:
                        colMap[rowNumber] = ((string)column[rowNumber]).Length;
                        break;

                    default:
                        colMap[rowNumber] = DataTypeSize[dataType];
                        break;
                    }
                }
                else
                {
                    colMap[rowNumber] = SQL_NULL_DATA;
                }
            }

            return(colMap);
        }
예제 #2
0
        /// <summary>
        /// 字段复制
        /// </summary>
        /// <param name="dest"></param>
        /// <returns></returns>
        protected override void CopyFrom(SimpleConfig dest)
        {
            base.CopyFrom(dest);
            var cfg = dest as SolutionConfig;

            if (cfg == null)
            {
                return;
            }

            DocFolder = cfg.DocFolder;            //文档文件夹名称
            SrcFolder = cfg.SrcFolder;            //代码文件夹名称
            RootPath  = cfg.RootPath;             //解决方案根路径
            NameSpace = cfg.NameSpace;            //解决方案命名空间
            foreach (var item in cfg.DataTypeMap) //数据类型映射
            {
                var child = new DataTypeMapConfig();
                child.Copy(item);
                DataTypeMap.Add(child);
            }
            SolutionType   = cfg.SolutionType;   //解决方案类型
            IdDataType     = cfg.IdDataType;     //主键数据类型
            UserIdDataType = cfg.UserIdDataType; //用户标识数据类型
            WorkView       = cfg.WorkView;       //工作视角
            AdvancedView   = cfg.AdvancedView;   //高级视角
        }
예제 #3
0
 private void ReadFields(IBSharpClass c, XElement xml)
 {
     foreach (XElement e in xml.Elements())
     {
         string name = e.Name.LocalName;
         if (DataTypeMap.ContainsKey(name) || name == "ref")
         {
             if (!string.IsNullOrWhiteSpace(e.Value))
             {
                 continue;
             }
             Field field = new Field().Setup(c, e, this);
             Fields[field.Name.ToLowerInvariant()] = field;
         }
         else
         {
             var reftype = c.Context.Get(name, c.Namespace);
             if (null != reftype)
             {
                 Field field = new Field {
                     ImplicitRef = true
                 }.Setup(c, e, this);
                 Fields[field.Name.ToLowerInvariant()] = field;
             }
         }
     }
 }
예제 #4
0
        private static Type MapDataType(string dataType)
        {
            if (string.IsNullOrEmpty(dataType))
            {
                return(typeof(object));
            }

            //we need to remove numbers inside brackets to avoid cases like timestamp(N) or something else
            dataType = Regex.Replace(dataType, @"\((\d+)\)", string.Empty);

            Type value;

            return(DataTypeMap.TryGetValue(dataType, out value) ? value : typeof(object));
        }
        public async Task <IList <Table> > GetTablesAsync(CancellationToken cancellationToken)
        {
            var columnSchema = await GetColumnSchemaOfAllTablesAsync(cancellationToken).ConfigureAwait(false);

            var constraints = (await GetConstraintsOfAllTablesAsync(cancellationToken).ConfigureAwait(false)).ToList();

            var schemas = columnSchema.GroupBy(x => x.TableSchema);

            return((from schema in schemas
                    select schema.Select(g => g).ToList()
                    into schemaColumns
                    where schemaColumns.Any()
                    let databaseName = schemaColumns.First().TableCatalog
                                       let schemaName = schemaColumns.First().TableSchema
                                                        let columnSets = schemaColumns.GroupBy(x => x.TableName)
                                                                         from columnSet in columnSets
                                                                         where columnSet.Any()
                                                                         let tableName = columnSet.First().TableName
                                                                                         let safeTableName = tableName.EscapeIllegalCsharpClassSymbols()
                                                                                                             let columns = columnSet.Select(g => g)
                                                                                                                           .Select(x =>
            {
                var dataType = DataTypeMap.ContainsKey(x.DataType)
                                ? DataTypeMap[x.DataType]
                                : DefaultDataType;
                if (x.IsNullable && !NonNullableDataTypes.Contains(dataType))
                {
                    dataType += NullableSymbol;
                }
                var safePropertyName = ToLegalPropertyName(x.ColumnName, tableName).EscapeIllegalCsharpClassSymbols();
                return new Column(new Name(x.ColumnName, safePropertyName), x.OrdinalPosition, x.IsNullable, dataType);
            })
                                                                                                                           .ToList()
                                                                                                                           let tableConstraints = constraints.Where(x => x.ConstraintCatalog == databaseName && x.TableSchema == schemaName && x.TableName.ActualName == tableName)
                                                                                                                                                  .ToList()
                                                                                                                                                  select new Table(databaseName, schemaName, new Name(tableName, safeTableName), columns, tableConstraints)).ToList());
        }