Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static TableColumnInfo[] GetColumns(this IDataReader reader)
        {
            if (reader == null)
            {
                return new TableColumnInfo[] { }
            }
            ;

            var dt = reader.GetSchemaTable();

            if (dt == null)
            {
                return new TableColumnInfo[] { }
            }
            ;

            var columns = new TableColumnInfo[dt.Rows.Count];

            for (var i = 0; i < columns.Length; i++)
            {
                var row        = dt.Rows[i];
                var columnName = row["ColumnName"].To <string>();

                columns[i] = new TableColumnInfo(columnName)
                {
                    DataType    = reader.GetDataTypeName(i),
                    Nullable    = row["AllowDBNull"].ToBool(),
                    RuntimeType = Type.GetType(row["DataType"].To <string>()),
                    Ordinal     = row["ColumnOrdinal"].To <int>()
                };
            }

            return(columns);
        }
        public override object GetValue(PropertyInfo entityPropertyInfo, TableColumnInfo columnInfo, byte[] message)
        {
            if (message == null || message.Length == 0)
            {
                return(null);
            }

            if (entityPropertyInfo.PropertyType.GetTypeInfo().IsEnum)
            {
                var stringValue = Encoding.Unicode.GetString(message);
                var value       = Enum.Parse(entityPropertyInfo.PropertyType, stringValue);
                return(value.GetHashCode());
            }

            if (entityPropertyInfo.PropertyType == typeof(byte[]))
            {
                return(message);
            }

            if (entityPropertyInfo.PropertyType == typeof(bool) || entityPropertyInfo.PropertyType == typeof(bool?))
            {
                return(Encoding.Unicode.GetString(message).ToBoolean());
            }

            if (entityPropertyInfo.PropertyType == typeof(char[]))
            {
                return(Encoding.Unicode.GetString(message).ToCharArray());
            }

            return(base.GetValue(entityPropertyInfo, columnInfo, message));
        }
Esempio n. 3
0
 public bool IsColumnEquals(TableMetadataInfo metadataInfo, TableColumnInfo columnInfo)
 {
     if (!StringUtils.EqualsIgnoreCase(metadataInfo.AttributeName, columnInfo.ColumnName)) return false;
     if (metadataInfo.DataType != columnInfo.DataType) return false;
     if (metadataInfo.DataLength != columnInfo.Length) return false;
     return true;
 }
        private static List <TableColumnInfo> Analyze(
            IEnumerator <MElement> en,
            MarkdownWriterSettings settings,
            MarkdownStringWriter writer)
        {
            MElement header = null;

            var columns = new List <TableColumnInfo>();

            header = en.Current;

            if (header is MContainer container)
            {
                WriteHeaderCells(container, settings, writer, columns);
            }
            else
            {
                writer.Write(header);
                columns.Add(TableColumnInfo.Create(header, writer));
            }

            if (settings.Format.FormatTableContent)
            {
                int index = writer.Length;

                while (en.MoveNext())
                {
                    int columnCount = columns.Count;

                    MElement row = en.Current;

                    if (row is MContainer rowContainer)
                    {
                        int i = 0;
                        foreach (MElement cell in rowContainer.Elements())
                        {
                            writer.Write(cell);
                            columns[i] = columns[i].UpdateWidthIfGreater(writer.Length - index);
                            index      = writer.Length;
                            i++;

                            if (i == columnCount)
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        writer.Write(row);
                        columns[0] = columns[0].UpdateWidthIfGreater(writer.Length - index);
                        index      = writer.Length;
                    }
                }
            }

            return(columns);
        }
 public static object ForColumn(TableColumnInfo columnInfo)
 {
     try
     {
         return(GenerateForColumn(columnInfo));
     }
     catch (Exception ex)
     {
         throw new Exception($"Could not generate value for column Name=[{columnInfo.Name}] Type=[{columnInfo.ColumnType}]", ex);
     }
 }
Esempio n. 6
0
        protected override void SetTableColumns()
        {
            TableColumnInfo[] columns = new TableColumnInfo[]
            {
                new TableColumnInfo("ID", "ID"),
                new TableColumnInfo("Cena", "Price"),
                new TableColumnInfo("Datum", "Date"),
                new TableColumnInfo("Vreme", "Time")
            };

            view.CreateColumns(columns);
        }
        private static void WriteHeaderCells(
            MContainer header,
            MarkdownWriterSettings settings,
            MarkdownStringWriter writer,
            List <TableColumnInfo> columns)
        {
            int index = 0;

            bool isFirst = true;
            bool isLast  = false;

            int i = 0;

            using (IEnumerator <MElement> en = header.Elements().GetEnumerator())
            {
                if (en.MoveNext())
                {
                    MElement curr = en.Current;

                    isLast = !en.MoveNext();

                    WriteHeaderCell(curr);

                    if (!isLast)
                    {
                        isFirst = false;

                        do
                        {
                            curr   = en.Current;
                            isLast = !en.MoveNext();
                            i++;

                            WriteHeaderCell(curr);
                        }while (!isLast);
                    }
                }
            }

            void WriteHeaderCell(MElement cellContent)
            {
                if (isFirst ||
                    isLast ||
                    settings.Format.FormatTableHeader)
                {
                    writer.Write(cellContent);
                }

                columns.Add(TableColumnInfo.Create(cellContent, writer, index));
                index = writer.Length;
            }
        }
Esempio n. 8
0
 public void TableColumnInfo_ctor_ArgumentNullExceptionThrownWithNullColumnName()
 {
     // Arrange / Act / Assert
     _biz = new TableColumnInfo(
         null,
         _columnDescription,
         _columnDataType,
         _columnLength,
         _defaultValue,
         _allowsNulls,
         _keySequence
         );
 }
        private static object GenerateForColumn(TableColumnInfo columnInfo)
        {
            switch (columnInfo.ColumnType)
            {
            case ColumnType.String:
                // generates a random string
                return(Any.String(columnInfo.MaxLength));

            case ColumnType.Int:
                // generates a random integer
                long maxValue = (int)Math.Pow(10, columnInfo.Precision - 1);
                if (maxValue > int.MaxValue)
                {
                    return(Any.Long(1, maxValue));
                }
                return(Any.Int(1, (int)maxValue));

            case ColumnType.Decimal:
                // generates a random decimal
                return(Any.Double(columnInfo.Precision, columnInfo.Scale));

            case ColumnType.Double:
                // generates a random double
                return(Any.Double(columnInfo.Precision, columnInfo.Scale));

            case ColumnType.Long:
                // generates a random long
                return(Any.Long(1, (int)Math.Pow(10, columnInfo.Precision - 1)));

            case ColumnType.Boolean:
                // generates a random boolean
                return(Any.Boolean());

            case ColumnType.Guid:
                // generates a random guid
                return(Guid.NewGuid());

            case ColumnType.Date:
                // generates a random date
                return(Any.DateTime().Date);

            case ColumnType.Datetime:
                // generates a random DateTime
                return(Any.DateTime());

            default:
                return(null);
            }
        }
Esempio n. 10
0
        public void TableColumnInfo_ctor_NotApplicableWithNullDefaultValue()
        {
            // Arrange / Act
            _biz = new TableColumnInfo(
                _columnName,
                _columnDescription,
                _columnDataType,
                _columnLength,
                null,
                _allowsNulls,
                _keySequence
                );

            Assert.AreEqual("N/A", _biz.DefaultValue, nameof(_biz.DefaultValue));
        }
Esempio n. 11
0
        public void TableColumnInfo_ctor_EmptyStringWithNullColumnDescription()
        {
            // Arrange / Act
            _biz = new TableColumnInfo(
                _columnName,
                null,
                _columnDataType,
                _columnLength,
                _defaultValue,
                _allowsNulls,
                _keySequence
                );

            Assert.AreEqual(string.Empty, _biz.ColumnDescription, nameof(_biz.ColumnDescription));
        }
        /// <summary>
        /// Inserts the generated value into database.
        /// </summary>
        /// <param name="values">Generated values dictionary.</param>
        /// <returns>The dictionary itself.</returns>
        private IDictionary <string, object> InsertInDatabase(IDictionary <string, object> values)
        {
            IDictionary <string, object> insertResult = _dbDialect.Insert(_tableName, _tableColumnInfoList, values);

            // Adds the generated record identifier to list
            TableColumnInfo identityColumn = _tableColumnInfoList.FirstOrDefault(t => t.IsIdentity) ?? _tableColumnInfoList.First();

            _generatedRecords.Push(new RecordIdentifier
            {
                TableName       = _tableName,
                ColumnName      = identityColumn.Name,
                IdentifierValue = insertResult[identityColumn.Name]
            });

            return(insertResult);
        }
Esempio n. 13
0
        /// <summary>
        /// Create column row
        /// </summary>
        /// <param name="worksheet">The worksheet</param>
        /// <param name="column">The current DB table column</param>
        /// <param name="currentRow">The current row</param>
        /// <param name="lastColumn">The last column</param>
        private void CreateTableColumnRow(ref IXLWorksheet worksheet, TableColumnInfo column, ref int currentRow, int lastColumn)
        {
            IXLRange row = CreateRow(ref worksheet, ref currentRow, lastColumn);

            row.Style.Border.InsideBorder  = XLBorderStyleValues.Thin;
            row.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;

            int currentColumn = 1;

            row.Cell(1, currentColumn++).Value = column.ColumnName;
            row.Cell(1, currentColumn++).Value = column.ColumnDescription;
            row.Cell(1, currentColumn++).Value = column.ColumnDataType;
            row.Cell(1, currentColumn++).Value = column.AdditionalInfoFormatted;
            row.Cell(1, currentColumn++).Value = column.DefaultValue;
            row.Cell(1, currentColumn++).Value = column.AllowsNulls;
            row.Cell(1, currentColumn++).Value = column.PartOfKeyFormatted;
        }
Esempio n. 14
0
        public void TableColumnInfo_Property_Default()
        {
            // Arrange / Act
            _biz = new TableColumnInfo(
                _columnName,
                _columnDescription,
                _columnDataType,
                null,
                _defaultValue,
                _allowsNulls,
                null
                );

            // Assert
            Assert.AreEqual(string.Empty, _biz.AdditionalInfoFormatted, nameof(_biz.AdditionalInfoFormatted));
            Assert.AreEqual(false, _biz.PartOfKeyFormatted, nameof(_biz.PartOfKeyFormatted));
        }
        public override object GetValue(PropertyInfo entityPropertyInfo, TableColumnInfo columnInfo, byte[] message)
        {
            if (message == null || message.Length == 0)
            {
                return(null);
            }

            if (entityPropertyInfo.PropertyType.GetTypeInfo().IsEnum)
            {
                foreach (var fInfo in entityPropertyInfo.PropertyType.GetFields(BindingFlags.Public | BindingFlags.Static))
                {
                    var underlyingType = Enum.GetUnderlyingType(entityPropertyInfo.PropertyType);
                    var stringValue    = Encoding.Unicode.GetString(message);
                    var value          = Convert.ChangeType(stringValue, underlyingType);
                    var enumVal        = fInfo.GetRawConstantValue();
                    if (value == enumVal)
                    {
                        return(enumVal);
                    }
                }
            }

            if (entityPropertyInfo.PropertyType == typeof(byte[]))
            {
                return(message);
            }

            if (entityPropertyInfo.PropertyType == typeof(bool) || entityPropertyInfo.PropertyType == typeof(bool?))
            {
                return(Encoding.Unicode.GetString(message).ToBoolean());
            }

            if (entityPropertyInfo.PropertyType == typeof(char[]))
            {
                return(Encoding.Unicode.GetString(message).ToCharArray());
            }

            return(base.GetValue(entityPropertyInfo, columnInfo, message));
        }
Esempio n. 16
0
 public void Setup()
 {
     _columnName        = "ColumnName";
     _columnDescription = "Column description";
     _columnDataType    = "varchar";
     _columnLength      = 255;
     _defaultValue      = "Default";
     _allowsNulls       = true;
     _keySequence       = 1;
     _biz = new TableColumnInfo(
         _columnName,
         _columnDescription,
         _columnDataType,
         _columnLength,
         _defaultValue,
         _allowsNulls,
         _keySequence
         );
     _biz.Table = _tableInfo;
     _tableInfo = new TableInfo(
         "TableName",
         "TableDescription",
         new DateTime(2000, 1, 1),
         new List <TableColumnInfo>()
     {
         new TableColumnInfo(
             _columnName,
             _columnDescription,
             _columnDataType,
             _columnLength,
             _defaultValue,
             _allowsNulls,
             _keySequence
             )
     }
         );
 }
Esempio n. 17
0
        /// <summary>
        /// Returns table metadata containing column info.
        /// </summary>
        private static TableInfo GetSectionBuildsTableInfo(
            IDictionary <TestClass, int> testCounts,
            IList <Build> builds)
        {
            var buildIdentifierColumns = new List <TableColumnInfo>()
            {
                new TableColumnInfo("LastName", "Last Name"),
                new TableColumnInfo("FirstName", "First Name"),
                new TableColumnInfo("BuildSucceeded", "Built?"),
                new TableColumnInfo("BuildTime", "Build time")
            };

            var allTestsColumn = new TableColumnInfo("AllTests", $"All tests ({testCounts.Values.Sum()})");

            var testResultColumns = testCounts
                                    .Keys
                                    .OrderBy(testClass => testClass.Order)
                                    .Select
                                    (
                testClass => new TableColumnInfo
                (
                    testClass.ClassName.ToAlphaNumeric(),
                    $"{testClass.DisplayName} ({testCounts[testClass]})"
                )
                                    ).ToList();

            return(new TableInfo
                   (
                       buildIdentifierColumns.Concat(new[] { allTestsColumn }).Concat(testResultColumns).ToList(),
                       new List <TableInfo>()
            {
                new TableInfo(typeof(TestClassTableEntry), showHeader: true)
            },
                       showHeader: true
                   ));
        }
Esempio n. 18
0
        public List <TableColumnInfo> GetTableColumnInfoList(string connectionString, string databaseName, string tableName, string tableId)
        {
            if (string.IsNullOrEmpty(connectionString))
            {
                connectionString = ConnectionString;
            }

            var cacheList = SqlUtils.Cache_GetTableColumnInfoListCache(connectionString, databaseName, tableId);

            if (cacheList != null && cacheList.Count > 0)
            {
                return(cacheList);
            }

            var list            = new List <TableColumnInfo>();
            var isIdentityExist = false;

            if (WebConfigUtils.IsMySql)
            {
                string sqlString = $"select COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, COLUMN_KEY from information_schema.columns where table_schema = '{databaseName}' and table_name = '{tableName}' order by table_name,ordinal_position; ";
                using (var rdr = ExecuteReader(connectionString, sqlString))
                {
                    while (rdr.Read())
                    {
                        var columnName   = Convert.ToString(rdr.GetValue(0));
                        var isNullable   = Convert.ToString(rdr.GetValue(1)) == "YES";
                        var dataType     = EDataTypeUtils.FromMySql(Convert.ToString(rdr.GetValue(2)));
                        var length       = rdr.IsDBNull(3) || dataType == EDataType.NText || dataType == EDataType.Text ? 0 : Convert.ToInt32(rdr.GetValue(3));
                        var precision    = rdr.IsDBNull(4) ? 0 : Convert.ToInt32(rdr.GetValue(4));
                        var scale        = rdr.IsDBNull(5) ? 0 : Convert.ToInt32(rdr.GetValue(5));
                        var isPrimaryKey = Convert.ToString(rdr.GetValue(6)) == "PRI";

                        var isIdentity = isPrimaryKey && StringUtils.EqualsIgnoreCase(columnName, "ID");

                        var info = new TableColumnInfo(databaseName, tableId, columnName, dataType, length, precision, scale, isPrimaryKey, isNullable, isIdentity);
                        list.Add(info);
                    }
                    rdr.Close();
                }
            }
            else
            {
                string sqlString =
                    $"select C.name, T.name, C.length, C.xprec, C.xscale, C.colstat, C.isnullable, case when C.autoval is null then 0 else 1 end, SC.text, (select CForgin.name from [{databaseName}].dbo.sysreferences Sr,[{databaseName}].dbo.sysobjects O,[{databaseName}].dbo.syscolumns CForgin where Sr.fkeyid={tableId} and Sr.fkey1=C.colid and Sr.rkeyid=O.id and CForgin.id=O.id and CForgin.colid=Sr.rkey1), (select O.name from [{databaseName}].dbo.sysreferences Sr,[{databaseName}].dbo.sysobjects O,[{databaseName}].dbo.syscolumns CForgin where Sr.fkeyid={tableId} and Sr.fkey1=C.colid and Sr.rkeyid=O.id and CForgin.id=O.id and CForgin.colid=Sr.rkey1), (select Sr.rkeyid from [{databaseName}].dbo.sysreferences Sr,[{databaseName}].dbo.sysobjects O,[{databaseName}].dbo.syscolumns CForgin where Sr.fkeyid={tableId} and Sr.fkey1=C.colid and Sr.rkeyid=O.id and CForgin.id=O.id and CForgin.colid=Sr.rkey1) from [{databaseName}].dbo.systypes T, [{databaseName}].dbo.syscolumns C left join [{databaseName}].dbo.syscomments SC on C.cdefault=SC.id where C.id={tableId} and C.xtype=T.xusertype order by C.colid";

                using (var rdr = ExecuteReader(connectionString, sqlString))
                {
                    while (rdr.Read())
                    {
                        var columnName = Convert.ToString(rdr.GetValue(0));
                        if (columnName == "msrepl_tran_version")//sqlserver 发布订阅字段,忽略
                        {
                            continue;
                        }
                        var dataType        = EDataTypeUtils.FromSqlServer(Convert.ToString(rdr.GetValue(1)));
                        var length          = GetDataLength(dataType, Convert.ToInt32(rdr.GetValue(2)));
                        var precision       = Convert.ToInt32(rdr.GetValue(3));
                        var scale           = Convert.ToInt32(rdr.GetValue(4));
                        var isPrimaryKeyInt = Convert.ToInt32(rdr.GetValue(5));
                        var isNullableInt   = Convert.ToInt32(rdr.GetValue(6));
                        var isIdentityInt   = Convert.ToInt32(rdr.GetValue(7));

                        var isPrimaryKey = isPrimaryKeyInt == 1;
                        var isNullable   = isNullableInt == 1;
                        var isIdentity   = isIdentityInt == 1 || StringUtils.EqualsIgnoreCase(columnName, "ID");
                        //sqlserver 2005 返回isIdentity结果不正确,so 在此假设所有ID字段为Idenity字段
                        if (isIdentity)
                        {
                            isIdentityExist = true;
                        }

                        var info = new TableColumnInfo(databaseName, tableId, columnName, dataType, length, precision, scale, isPrimaryKey, isNullable, isIdentity);
                        list.Add(info);
                    }
                    rdr.Close();
                }

                if (!isIdentityExist)
                {
                    var sqlIdentity = "select name from syscolumns where id = object_id(N'" + tableName + "') and COLUMNPROPERTY(id, name,'IsIdentity')= 1";
                    var clName      = "";
                    using (var rdr = ExecuteReader(sqlIdentity))
                    {
                        if (rdr.Read())
                        {
                            clName = GetString(rdr, 0);
                        }
                        rdr.Close();
                    }

                    foreach (var info in list)
                    {
                        if (clName == info.ColumnName)
                        {
                            info.IsIdentity = true;
                        }
                    }
                }
            }

            SqlUtils.Cache_CacheTableColumnInfoList(connectionString, databaseName, tableId, list);

            return(list);
        }
Esempio n. 19
0
        public virtual object GetValue(PropertyInfo propertyInfo, TableColumnInfo columnInfo, byte[] message)
        {
            var stringValue = Convert.ToString(this.MessagesBag.Encoding.GetString(message), base.CultureInfo);

            return(this.GetValueObject(propertyInfo, stringValue));
        }
Esempio n. 20
0
        public async Task <PagedData> GetTableDataListSearch(string connectionName, string tableName, int page, int pageSize, List <SearchFieldInfo> searchFields, string sortColumn, string sortDir, string sortColumnDataType)
        {
            var customConnection = await _context.CustomConnection.SingleOrDefaultAsync(x => x.Name == connectionName);

            var connectionString = Util.GetConnectionString(customConnection);

            var columnList = await GetColumnInfo(connectionName, tableName);

            string whereStmt = "";

            foreach (var field in searchFields)
            {
                whereStmt += field.Name + " like '" + field.Value + "%' and ";
            }

            if (!string.IsNullOrEmpty(whereStmt))
            {
                whereStmt = " where " + whereStmt.TrimEnd(' ', 'a', 'n', 'd', ' ');
            }

            var orderStmt = "";

            if (!string.IsNullOrEmpty(sortColumn))
            {
                orderStmt = " order by " + sortColumn + " " + sortDir;
            }
            else
            {
                orderStmt = " order by ROWID ";
            }

            var tableDataListCountSql = @"select count(*) from " + tableName + whereStmt;

            var pagedData = new PagedData
            {
                Page     = page,
                PageSize = pageSize
            };

            decimal count = 0;

            var belowRowIndex = 1;
            var topRowIndex   = 1 * pagedData.PageSize;

            if (page > 0)
            {
                belowRowIndex = page * pagedData.PageSize + 1;
                topRowIndex   = (page + 1) * pagedData.PageSize;
            }

            var tableDataListSql = @"select * from ( " +
                                   "select mt.*, " +
                                   "row_number() over (" + orderStmt + ") rn " +
                                   "from " + tableName + @" mt " + whereStmt + ") " +
                                   "where rn between " + belowRowIndex + " and " + topRowIndex + (string.IsNullOrEmpty(orderStmt) ? " order by rn" : "");

            var sessionSqlHistory = new SessionSqlHistory
            {
                EventDate    = DateTime.Now,
                SqlText      = tableDataListSql,
                BasicSqlText = "select * from " + tableName + whereStmt + (string.IsNullOrEmpty(orderStmt) ? "" : orderStmt)
            };

            var myRowDict = new Dictionary <int, Row>();

            using (var oconn = new OracleConnection(connectionString))
            {
                oconn.Open();
                using (var cmdCount = new OracleCommand
                {
                    Connection = oconn,
                    CommandText = tableDataListCountSql,
                    CommandType = CommandType.Text
                })
                {
                    count = (decimal)cmdCount.ExecuteScalar();

                    oconn.Open();
                    using (var cmd = new OracleCommand
                    {
                        Connection = oconn,
                        CommandText = tableDataListSql,
                        CommandType = CommandType.Text
                    })
                    {
                        var dr = cmd.ExecuteReader();

                        var viewRowId = 0;

                        while (dr.Read())
                        {
                            var row = new Row();

                            var rowData = new List <TableColumnInfo>();

                            for (int i = 0; i < columnList.Count; i++)
                            {
                                var columnInfo = columnList[i];

                                var tableColumnInfo = new TableColumnInfo
                                {
                                    DataType     = columnInfo.DataType,
                                    IsPrimaryKey = columnInfo.IsPrimaryKey,
                                    Name         = columnInfo.Name
                                };

                                if (dr.GetValue(i) != DBNull.Value)
                                {
                                    tableColumnInfo.Value = dr.GetValue(i).ToString();
                                }
                                else
                                {
                                    tableColumnInfo.Value = "";
                                }

                                if (tableColumnInfo.IsPrimaryKey)
                                {
                                    row.PrimaryKey = string.IsNullOrEmpty(row.PrimaryKey) ? tableColumnInfo.Value : row.PrimaryKey + ";" + tableColumnInfo.Value;
                                }

                                rowData.Add(tableColumnInfo);
                            }

                            row.TableColumnInfos     = rowData;
                            row.TableColumnInfosJson = JsonConvert.SerializeObject(rowData);

                            myRowDict.Add(viewRowId++, row);
                        }
                    }
                }
            }

            await _context.SessionSqlHistory.AddAsync(sessionSqlHistory);

            await _context.SaveChangesAsync();

            pagedData.Data  = myRowDict;
            pagedData.Total = Convert.ToInt32(count);

            pagedData.PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(count) / (Convert.ToDouble(pagedData.PageSize))));

            return(pagedData);
        }
Esempio n. 21
0
        /// <summary>
        /// Create rows for missing column descriptions
        /// </summary>
        /// <param name="sheet">The worksheet</param>
        /// <param name="currentRow">The current row</param>
        /// <param name="column">The column to print</param>
        private void CreateTableRowsForMissingColumnDescriptions(ref IXLWorksheet sheet, ref int currentRow, TableColumnInfo column)
        {
            if (!string.IsNullOrEmpty(column.ColumnDescription))
            {
                return;
            }

            IXLRange row           = CreateRow(ref sheet, ref currentRow);
            int      currentColumn = 1;

            row.Cell(1, currentColumn++).Value = column.Table.TableName;
            row.Cell(1, currentColumn++).Value = column.ColumnName;
            row.Cell(1, currentColumn++).Value = column.ColumnDescription;
            row.Cell(1, currentColumn++).Value = string.Empty;

            string replacementFormula = "RC[1]";

            replacementFormula = @"SUBSTITUTE(" + replacementFormula + @", ""{0}"", RC[-4])";                           // Replaces {0} with table name
            replacementFormula = @"SUBSTITUTE(" + replacementFormula + @", ""{1}"", RC[-3])";                           // Replaces {1} with columns name
            replacementFormula = "SUBSTITUTE(" + replacementFormula + @", ""{2}"", SUBSTITUTE(RC[-2], ""'"", ""''""))"; // Replaces {2} with description, also replaces "'" in description with "''" for SQL single quote escape

            row.Cell(1, currentColumn++).FormulaR1C1 = @"=IF(RC[-2] = """", ""Enter a Column description (Column C)"", " + replacementFormula + ")";

            int sqlScriptColumn = currentColumn++;

            row.Cell(1, sqlScriptColumn).Value = Common.SqlQuery._SCRIPT_TEMPLATE_FOR_TABLE_COLUMN;
            row.Cell(1, sqlScriptColumn).Style.Font.SetFontColor(XLColor.White);
        }
Esempio n. 22
0
        public async Task <IActionResult> EditDataPost(string connectionName, string tableName, IEnumerable <string> dataFields, IEnumerable <string> oldDataFields, string tableColumnInfosJson)
        {
            var tableDataVM = new TableDataVM
            {
                TableList      = await _util.GetTableList(connectionName),
                TableName      = tableName,
                ConnectionName = connectionName
            };

            var customConnection = await _context.CustomConnection.SingleOrDefaultAsync(x => x.Name == connectionName);

            var connectionString = Util.GetConnectionString(customConnection);

            tableDataVM.TableGroups = await _util.GetTableGroups(tableDataVM.TableList);

            var columnList    = new List <TableColumnInfo>();
            var tableDataDict = new PagedData {
                Data = new Dictionary <int, Row>()
            };

            columnList = await _util.GetColumnInfo(connectionName, tableName);

            var tablemetadata = await _util.GetTableMetadata(connectionName, tableName);

            tableDataVM.ColumnList    = columnList;
            tableDataVM.TableDataList = tableDataDict;
            tableDataVM.SequenceName  = tablemetadata.SequenceName;

            var dataFieldArray = dataFields.ToArray();

            var oldDataFieldArray = oldDataFields.ToArray();

            var primaryKey = GetPrimaryKey(columnList, dataFieldArray);

            var whereColumnListStmt = "";

            if (string.IsNullOrEmpty(primaryKey))
            {
                var oldColumnList = JsonConvert.DeserializeObject <List <TableColumnInfo> >(tableColumnInfosJson).ToArray();
                var builderWhere  = new System.Text.StringBuilder();
                builderWhere.Append(whereColumnListStmt);

                for (int j = 0; j < columnList.Count(); j++)
                {
                    builderWhere.Append(columnList[j].Name + "='" + oldColumnList[j].Value + "' and ");
                }
                whereColumnListStmt = builderWhere.ToString();

                whereColumnListStmt = whereColumnListStmt.TrimEnd(' ', 'd', 'n', 'a');
            }

            var columnListStmt = "";
            var builder        = new System.Text.StringBuilder();

            builder.Append(columnListStmt);

            for (int j = 0; j < columnList.Count(); j++)
            {
                if (columnList[j].IsPrimaryKey)
                {
                    continue;
                }

                if (columnList[j].DataType.Equals("DATE"))
                {
                    builder.Append(columnList[j].Name + "=TO_DATE('" + dataFieldArray[j] + "','dd.mm.yyyy HH24:MI:SS'), ");;
                }
                else
                {
                    builder.Append(columnList[j].Name + "='" + dataFieldArray[j] + "', ");;
                }
            }

            columnListStmt = builder.ToString();

            columnListStmt = columnListStmt.TrimEnd(' ').TrimEnd(',');

            var updateSqlStmt = "";

            var whereStmt = Util.FindUniqueRowWhereStmt(primaryKey, columnList);

            updateSqlStmt = string.IsNullOrEmpty(primaryKey) ? "update " + tableName + " set " + columnListStmt + " where " + whereColumnListStmt : "update " + tableName + " set " + columnListStmt + " where " + whereStmt;

            var sessionHistorySql = new SessionSqlHistory
            {
                EventDate    = DateTime.Now,
                SqlText      = updateSqlStmt,
                BasicSqlText = updateSqlStmt
            };

            using (var oconn = new OracleConnection(connectionString))
            {
                oconn.Open();
                using (var cmd = new OracleCommand
                {
                    Connection = oconn,
                    CommandText = updateSqlStmt,
                    CommandType = CommandType.Text
                })
                {
                    var result = cmd.ExecuteNonQuery();
                }
            }

            await _context.SessionSqlHistory.AddAsync(sessionHistorySql);

            await _context.SaveChangesAsync();

            var tableColumnInfos = new List <TableColumnInfo>();

            for (int j = 0; j < columnList.Count(); j++)
            {
                var tableColumnInfo = new TableColumnInfo
                {
                    DataType     = columnList[j].DataType,
                    IsPrimaryKey = columnList[j].IsPrimaryKey,
                    Name         = columnList[j].Name,
                    Value        = dataFieldArray[j],
                    OldValue     = columnList[j].OldValue
                };

                tableColumnInfos.Add(tableColumnInfo);
            }

            var newTableColumnInfosJson = JsonConvert.SerializeObject(tableColumnInfos);

            tableDataVM.RowData = await _util.GetRowData(connectionName, tableName, primaryKey, newTableColumnInfosJson);

            tableDataVM.TableColumnInfosJson = newTableColumnInfosJson;

            ViewBag.Message = "Successfully saved";

            return(View(nameof(EditData), tableDataVM));
        }
Esempio n. 23
0
        public async Task <List <TableColumnInfo> > GetColumnInfo(string connectionName, string tableName)
        {
            var columnInfoKey = connectionName + ":" + tableName;

            if (ConnectionColumnInfo.ContainsKey(columnInfoKey))
            {
                return(ConnectionColumnInfo[columnInfoKey]);
            }

            var customConnection = await _context.CustomConnection.SingleOrDefaultAsync(x => x.Name == connectionName);

            var connectionString = Util.GetConnectionString(customConnection);

            var columnList = new List <TableColumnInfo>();

            const string columnListSql = "select COLUMN_NAME, DATA_TYPE from user_tab_columns where TABLE_NAME = :tablename order by column_id";

            using (var oconn = new OracleConnection(connectionString))
            {
                oconn.Open();

                var primaryColumnList    = new List <string>();
                var foreignKeyColumnDict = new Dictionary <string, ForeignKeyInfo>();

                var primaryForeignColumns = "SELECT ac.table_name, column_name, position, ac.constraint_name, constraint_type, " +
                                            "(SELECT ac2.table_name FROM all_constraints ac2 WHERE AC2.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME) fK_to_table, " +
                                            "(SELECT ac3.column_name FROM all_cons_columns ac3 WHERE AC3.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME) fK_to_table_column " +
                                            "FROM all_cons_columns acc, all_constraints ac " +
                                            "WHERE     acc.constraint_name = ac.constraint_name " +
                                            "AND acc.table_name = ac.table_name " +
                                            "AND CONSTRAINT_TYPE IN('P', 'R') " +
                                            "AND ac.table_name = '" + tableName + "' " +
                                            "ORDER BY table_name, constraint_type, position";

                using (var cmdPrimaryForeignColumns = new OracleCommand
                {
                    Connection = oconn,
                    CommandText = primaryForeignColumns,
                    CommandType = CommandType.Text
                })
                {
                    var drPrimForeignColumns = cmdPrimaryForeignColumns.ExecuteReader();
                    while (drPrimForeignColumns.Read())
                    {
                        var constraintType = drPrimForeignColumns.GetString(4);

                        if (constraintType == "P")
                        {
                            primaryColumnList.Add(drPrimForeignColumns.GetString(1));
                        }
                        else
                        {
                            var name = drPrimForeignColumns.GetString(1);
                            foreignKeyColumnDict[name] = new ForeignKeyInfo
                            {
                                Name             = drPrimForeignColumns.GetString(1),
                                ForeignKeyTable  = drPrimForeignColumns.GetString(5),
                                ForeignKeyColumn = drPrimForeignColumns.GetString(6)
                            };
                        }
                    }

                    using (var cmd = new OracleCommand
                    {
                        Connection = oconn,
                        CommandText = columnListSql,
                        CommandType = CommandType.Text
                    })
                    {
                        cmd.Parameters.Add("tablename", tableName);

                        var dr = cmd.ExecuteReader();
                        while (dr.Read())
                        {
                            var columnName   = dr.GetString(0);
                            var isPrimary    = false;
                            var isForeignKey = false;

                            if (primaryColumnList.Contains(columnName))
                            {
                                isPrimary = true;
                            }

                            var tableColumnInfo = new TableColumnInfo
                            {
                                Name         = dr.GetString(0),
                                DataType     = dr.GetString(1),
                                IsPrimaryKey = isPrimary,
                                IsForeignKey = isForeignKey
                            };

                            if (foreignKeyColumnDict.ContainsKey(columnName))
                            {
                                isForeignKey = true;
                                var foreignKeyInfo = foreignKeyColumnDict[columnName];
                                tableColumnInfo.IsForeignKey          = true;
                                tableColumnInfo.ForeignTable          = foreignKeyInfo.ForeignKeyTable;
                                tableColumnInfo.ForeignTableKeyColumn = foreignKeyInfo.ForeignKeyColumn;
                            }

                            columnList.Add(tableColumnInfo);
                        }
                    }
                }
            }

            ConnectionColumnInfo[columnInfoKey] = columnList;

            return(columnList);
        }
Esempio n. 24
0
        public override TableColumnInfo[] GetTableSchemaInfo(string tableName)
        { //MaxLength is cut to half when the column is a N type. Those types use double space.
            string sql = @"
            SELECT
	            OUTCOLUMNS.NAME                                         Name, 
	            TYPES.NAME                                              ColumnType, 
	            FLOOR(OUTCOLUMNS.[MAX_LENGTH] * 
	            CASE WHEN  TYPES.NAME IN ('nvarchar','nchar','ntext') 
		            then .5	
		            else 1 end) [MaxLength],
	            OUTCOLUMNS.[PRECISION]                                  [Precision],
	            OUTCOLUMNS.SCALE                                        Scale,
	            OUTCOLUMNS.IS_NULLABLE                                  IsNullable,
	            OUTCOLUMNS.IS_IDENTITY                                  IsIdentity,
                IIF(REFERENCED_COLUMN_NAME IS NULL, 0, 1)               IsForeignKey,
	            CONCAT(REFERENCED_SCHEMA, '.', REFERENCED_TABLE_NAME)   ForeignKeyTable,
	            REFERENCED_COLUMN_NAME                                  ForeignKeyColumn,
	            IS_UNIQUE                                               IsUnique
            FROM SYS.COLUMNS OUTCOLUMNS
            INNER JOIN SYS.TYPES ON OUTCOLUMNS.user_type_id = TYPES.user_type_id
            outer apply(

		            SELECT DISTINCT tables.schemaName FK_SCHEMA,
						            tables.name FK_TABLE_NAME,
						            fkc.name FK_COLUMN_NAME,
						            rpk.schemaname REFERENCED_SCHEMA,
						            rpk.table_name REFERENCED_TABLE_NAME,
						            rpk.name REFERENCED_COLUMN_NAME
		            FROM sys.foreign_keys 
			            CROSS apply
				            (SELECT INCOLUMNS.name, referenced_column_id, referenced_object_id
				               FROM sys.foreign_key_columns
				               INNER JOIN sys.columns INCOLUMNS ON INCOLUMNS.column_id = foreign_key_columns.parent_column_id AND INCOLUMNS.[object_id] = foreign_key_columns.parent_object_id and OUTCOLUMNS.column_id = INCOLUMNS.column_id
				               WHERE foreign_key_columns.constraint_object_id = foreign_keys.[object_id]) fkc 
			            CROSS apply
				            (SELECT schema_name(tables.schema_id) schemaname, object_name(tables.object_id) TABLE_NAME, columns.name
				               FROM sys.tables
				               INNER JOIN sys.columns ON tables.object_id = columns.object_id
				               AND columns.column_id = referenced_column_id
				               WHERE tables.object_id = fkc.referenced_object_id) rpk 
			            CROSS apply
				            (SELECT schema_name(tables.schema_id) schemaname, name
				               FROM sys.tables
				               WHERE tables.object_id = foreign_keys.parent_object_id) tables

		            WHERE foreign_keys.parent_object_id = OUTCOLUMNS.object_id
            ) outerapply
			OUTER APPLY(
				SELECT CAST(
					CASE WHEN EXISTS (
						SELECT * from sys.key_constraints C
						WHERE PARENT_OBJECT_ID in (OBJECT_ID(@tableName))
						AND unique_index_id = OUTCOLUMNS.column_id) THEN 1
					ELSE 0
					END
				AS BIT) AS IS_UNIQUE
			) PK
            WHERE OBJECT_ID in (OBJECT_ID(@tableName))
            AND OUTCOLUMNS.IS_COMPUTED = 0
            ORDER BY OUTCOLUMNS.column_id
";
            var    informationSchemaCmd = new SqlCommand(sql);

            informationSchemaCmd.Parameters.Add(new SqlParameter
            {
                ParameterName = "@tableName",
                Value         = tableName
            });

            informationSchemaCmd.Connection = _sqlConnection;

            var dr = informationSchemaCmd.ExecuteReader();

            var tableColumns = new List <TableColumnInfo>();

            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    var tableColumnInfo = new TableColumnInfo();

                    tableColumnInfo.Name             = (string)dr["Name"];
                    tableColumnInfo.Precision        = Convert.ToInt32(dr["Precision"]);
                    tableColumnInfo.Scale            = Convert.ToInt32(dr["Scale"]);
                    tableColumnInfo.MaxLength        = Convert.ToInt32(dr["MaxLength"]);
                    tableColumnInfo.IsIdentity       = Convert.ToBoolean(dr["IsIdentity"]);
                    tableColumnInfo.IsNullable       = Convert.ToBoolean(dr["IsNullable"]);
                    tableColumnInfo.IsForeignKey     = Convert.ToBoolean(dr["IsForeignKey"]);
                    tableColumnInfo.ForeignKeyTable  = (string)dr["ForeignKeyTable"];
                    tableColumnInfo.ForeignKeyColumn = dr["ForeignKeyColumn"] is DBNull ? null : (string)dr["ForeignKeyColumn"];
                    tableColumnInfo.IsUnique         = Convert.ToBoolean(dr["IsUnique"]);

                    switch (((string)dr["ColumnType"]).ToUpper())
                    {
                    case "REAL":
                    case "SMALLMONEY":
                    case "MONEY":
                    case "NUMERIC":
                    case "DECIMAL":
                        tableColumnInfo.ColumnType = ColumnType.Decimal;
                        break;

                    case "CHAR":
                    case "NCHAR":
                    case "NVARCHAR":
                    case "TEXT":
                    case "NTEXT":
                    case "VARCHAR":
                        tableColumnInfo.ColumnType = ColumnType.String;
                        break;

                    case "ROWVERSION":
                    case "FILESTREAM":
                    case "VARBINARY":
                    case "IMAGE":
                        tableColumnInfo.ColumnType = ColumnType.Byte;
                        break;

                    case "FLOAT":
                        tableColumnInfo.ColumnType = ColumnType.Double;
                        break;

                    case "BINARY":
                        tableColumnInfo.ColumnType = ColumnType.Binary;
                        break;

                    case "BIT":
                        tableColumnInfo.ColumnType = ColumnType.Boolean;
                        break;

                    case "TINYINT":
                    case "INT":
                    case "SMALLINT":
                        tableColumnInfo.ColumnType = ColumnType.Int;
                        break;

                    case "BIGINT":
                        tableColumnInfo.ColumnType = ColumnType.Long;
                        break;

                    case "UNIQUEIDENTIFIER":
                        tableColumnInfo.ColumnType = ColumnType.Guid;
                        break;;

                    case "DATE":
                        tableColumnInfo.ColumnType = ColumnType.Date;
                        break;

                    case "TIME":
                    case "SMALLDATETIME":
                    case "DATETIMEOFFSET":
                    case "DATETIME2":
                    case "DATETIME":
                        tableColumnInfo.ColumnType = ColumnType.Datetime;
                        break;

                    default:
                        tableColumnInfo.ColumnType = ColumnType.Unsuported;
                        break;
                    }

                    tableColumns.Add(tableColumnInfo);
                }
                dr.Dispose();

                return(tableColumns.ToArray());
            }
            throw new Exception("Table not found!");
        }
        /// <summary>
        /// Gets the filtered operations.
        /// </summary>
        /// <param name="operations">The operations.</param>
        /// <param name="skippedOperationComments">The skipped operation comments.</param>
        /// <returns></returns>
        private List <MigrationOperation> GetFilteredOperations(IEnumerable <System.Data.Entity.Migrations.Model.MigrationOperation> operations, out List <string> skippedOperationComments)
        {
            List <MigrationOperation> includedOperations = new List <System.Data.Entity.Migrations.Model.MigrationOperation>();

            skippedOperationComments = new List <string>();

            // make comments on the skipped Down() operations and add to includedOperations ones that are not skipped
            skippedOperationComments.Add(string.Empty);
            skippedOperationComments.Add("// Up()...");
            foreach (MigrationOperation operation in operations)
            {
                TableColumnInfo tableColumnInfo = GetOperationTableColumnInfo(operation);

                if (!string.IsNullOrWhiteSpace(tableColumnInfo.TableName) && !dbContextEntities.ContainsKey(tableColumnInfo.TableName))
                {
                    //// not found if Migration is trying to gen code for a table in another DbContext of a Multiple Context project
                    //// probably not found if this is the Down() migration

                    string columnInfo = string.Empty;
                    if (!string.IsNullOrWhiteSpace(tableColumnInfo.ColumnName))
                    {
                        columnInfo = ", column " + tableColumnInfo.ColumnName;
                    }

                    skippedOperationComments.Add(string.Format("// {0} for TableName {1}{2}.", operation.GetType().Name, tableColumnInfo.TableName, columnInfo));
                }
                else
                {
                    includedOperations.Add(operation);
                }
            }

            // make comments on the skipped Down() operations
            skippedOperationComments.Add(string.Empty);
            skippedOperationComments.Add("// Down()...");
            foreach (MigrationOperation operation in operations.Select(a => a.Inverse).Where(a => a != null).Reverse())
            {
                TableColumnInfo tableColumnInfo = GetOperationTableColumnInfo(operation);

                if (!string.IsNullOrWhiteSpace(tableColumnInfo.TableName) && !dbContextEntities.ContainsKey(tableColumnInfo.TableName))
                {
                    //// not found if Migration is trying to gen code for a table in another DbContext of a Multiple Context project
                    //// probably not found if this is the Down() migration

                    string columnInfo = string.Empty;
                    if (!string.IsNullOrWhiteSpace(tableColumnInfo.ColumnName))
                    {
                        columnInfo = ", column " + tableColumnInfo.ColumnName;
                    }

                    skippedOperationComments.Add(string.Format("// {0} for TableName {1}{2}.", operation.GetType().Name, tableColumnInfo.TableName, columnInfo));
                }
            }

            if (skippedOperationComments.Count == 4)
            {
                // if there are exactly four comments, nothing was skipped
                skippedOperationComments.Clear();
            }

            return(includedOperations);
        }