示例#1
0
        /// <summary>
        /// Returns the column index of the column name. Will standardize the name, does a dictionary lookup and will return null if not present.
        /// </summary>
        /// <param name="columnName"></param>
        /// <returns></returns>
        public Int32?GetColumnIndex(String columnName)
        {
            var standardizedName = Model.StandardizeCasing(columnName);

            if (ColumnNameMap.ContainsKey(standardizedName))
            {
                return(ColumnNameMap[standardizedName]);
            }
            else
            {
                return(null);
            }
        }
 public SimpleSchema(IExceptionContext ectx, KeyValuePair <string, ColumnType>[] columns,
                     Dictionary <string, MetadataUtils.MetadataGetter <VBuffer <ReadOnlyMemory <char> > > > keyValues)
     : this(ectx, columns)
 {
     foreach (var kvp in keyValues)
     {
         var name   = kvp.Key;
         var getter = kvp.Value;
         if (!ColumnNameMap.TryGetValue(name, out int col))
         {
             throw Ectx.ExceptParam(nameof(keyValues), $"Output schema does not contain column '{name}'");
         }
         if (!Types[col].ItemType.IsKey)
         {
             throw Ectx.ExceptParam(nameof(keyValues), $"Column '{name}' is not a key column, so it cannot have key value metadata");
         }
         _keyValueGetters[col] = getter;
     }
 }
示例#3
0
        /// <summary>
        /// Do an ALTER on the db table and add a column
        /// </summary>
        /// <param name="tableName">The table name</param>
        /// <param name="columnName">The column to add</param>
        /// <param name="columnType">The db column type</param>
        /// <param name="columnNumber">The column number (-1 if not to be used)</param>
        private void AddColumn(string tableName, string columnName, string columnType, int columnNumber)
        {
            string colName;

            if (tableName.StartsWith("_") || columnNumber < 0 ||
                columnName.Equals("SimulationID", StringComparison.OrdinalIgnoreCase) ||
                columnName.Equals("SimulationName", StringComparison.OrdinalIgnoreCase) ||
                columnName.Equals("CheckpointID", StringComparison.OrdinalIgnoreCase) ||
                columnName.Equals("CheckpointName", StringComparison.OrdinalIgnoreCase))
            {
                colName = columnName.Substring(0, Math.Min(31, columnName.Length));
            }
            else
            {
                colName = "COL_" + columnNumber.ToString();
            }

            string sql;

            if (FieldExists(tableName, colName))
            {
                DropColumn(tableName, colName);
            }

            sql = "ALTER TABLE \"" + tableName + "\" ADD \"" + colName + "\" " + columnType;
            this.ExecuteNonQuery(sql);

            this.ExecuteNonQuery("INSERT INTO \"_ColumnInfo\" VALUES('" + tableName + "', + '" + columnName + "', " + columnNumber.ToString() + ")");

            ColumnNameMap nameMap;

            if (!colInfoMap.TryGetValue(tableName, out nameMap))
            {
                nameMap = new ColumnNameMap();
                colInfoMap.Add(tableName, nameMap);
            }

            nameMap.ColDict.Add(columnName, columnNumber);
            nameMap.LongNames.Insert(columnNumber, columnName);
        }
示例#4
0
 /// <summary>
 /// Open the Firebird SQL connection
 /// </summary>
 /// <param name="dbpath">Path to database</param>
 /// <param name="source">localhost or server name</param>
 /// <param name="user">db user name</param>
 /// <param name="pass">db password</param>
 /// <returns>True if opened</returns>
 private bool OpenSQLConnection(string dbpath, string source, string user, string pass)
 {
     try
     {
         if (fbDBConnection.State == ConnectionState.Closed)
         {
             fbDBDataSet.Locale = CultureInfo.InvariantCulture;
             fbDBConnection.ConnectionString = GetConnectionString(dbpath, source, user, pass);
             fbDBConnection.Open();
         }
         if (TableExists("_ColumnInfo"))
         {
             DataTable     colInfoTable = ExecuteQuery("SELECT \"TableName\", \"ColumnName\", \"ColumnNumber\" FROM \"_ColumnInfo\" ORDER BY \"TableName\", \"ColumnNumber\"");
             string        currentTable = string.Empty;
             ColumnNameMap currentMap   = null;
             foreach (DataRow row in colInfoTable.Rows)
             {
                 string tableName    = ((string)row[0]).Trim();
                 string columnName   = ((string)row[1]).Trim();
                 int    columnNumber = Convert.ToInt32(row[2]);
                 if (tableName != currentTable)
                 {
                     currentTable = tableName;
                     currentMap   = new ColumnNameMap();
                     colInfoMap.Add(tableName, currentMap);
                 }
                 currentMap.ColDict.Add(columnName, columnNumber);
                 currentMap.LongNames.Insert(columnNumber, columnName);
             }
         }
         return(true);
     }
     catch (Exception ex)
     {
         throw new FirebirdException("Cannot open database connection To " + dbpath + "!\r\n" + ex.Message);
     }
 }
示例#5
0
 /// <summary>
 /// Returns true if the result set contains the columnName
 /// </summary>
 /// <param name="columnName"></param>
 /// <returns></returns>
 public Boolean HasColumn(String columnName)
 {
     return(ColumnNameMap.ContainsKey(columnName));
 }
示例#6
0
        /// <summary>Create the new table</summary>
        public void CreateTable(string tableName, List <string> colNames, List <string> colTypes)
        {
            // We use the _ColumnInfo table to map between column names and column numbers
            if (TableExists("_ColumnInfo"))
            {
                // We're creating a new table here, so delete any old records
                this.ExecuteNonQuery("DELETE FROM \"_ColumnInfo\" WHERE \"TableName\"='" + tableName + "'");
            }
            else
            {
                this.ExecuteNonQuery("CREATE TABLE \"_ColumnInfo\" (\"TableName\" VARCHAR(500), \"ColumnName\" VARCHAR(500), \"ColumnNumber\" INTEGER)");
            }

            ColumnNameMap nameMap;

            if (colInfoMap.TryGetValue(tableName, out nameMap))
            {
                nameMap.ColDict.Clear();
                nameMap.LongNames.Clear();
            }
            else
            {
                nameMap = new ColumnNameMap();
                colInfoMap.Add(tableName, nameMap);
            }

            StringBuilder sql = new StringBuilder();

            for (int c = 0; c < colNames.Count; c++)
            {
                if (sql.Length > 0)
                {
                    sql.Append(',');
                }

                string columnName = colNames[c];
                sql.Append("\"");
                // sql.Append(colNames[c]);
                if (tableName.StartsWith("_") ||
                    columnName.Equals("SimulationID", StringComparison.OrdinalIgnoreCase) ||
                    columnName.Equals("SimulationName", StringComparison.OrdinalIgnoreCase) ||
                    columnName.Equals("CheckpointID", StringComparison.OrdinalIgnoreCase) ||
                    columnName.Equals("CheckpointName", StringComparison.OrdinalIgnoreCase))
                {
                    sql.Append(columnName.Substring(0, Math.Min(31, columnName.Length))); /////
                }
                else
                {
                    sql.Append("COL_" + c.ToString());
                }
                sql.Append("\" ");
                if (colTypes[c] == null)
                {
                    sql.Append("INTEGER");
                }
                else
                {
                    sql.Append(colTypes[c]);
                }

                this.ExecuteNonQuery("INSERT INTO \"_ColumnInfo\" VALUES('" + tableName + "', + '" + columnName + "', " + c.ToString() + ")");
                nameMap.ColDict.Add(columnName, c);
                nameMap.LongNames.Insert(c, columnName);
            }

            sql.Insert(0, "CREATE TABLE \"" + tableName + "\" (");
            sql.Append(')');
            this.ExecuteNonQuery(sql.ToString());
        }