private void GetMinValue(MSITableColumn column, out int minValue, out bool useMinValue) {
     minValue = column.minvalue;
     useMinValue = column.minvalueSpecified;
     if (!useMinValue && IsNumeric(column.category)) {
         useMinValue = true;
         minValue = GetMinValue(column.category);
     }
 }
 private string GetNullability(MSITableColumn column) {
     string nullability;
     if (column.nullable) {
         if (column.key) {
             nullability = NullableKeyColumn;
         } else {
             nullability = NullableColumn;
         }
     } else {
         nullability = NonNullableColumn;
     }
     return nullability;
 }
 private string GetValidationCategory(MSITableColumn column) {
     string columnCategory = null;
     if (!IsNumeric(column.category)) {
         columnCategory = column.category.ToString();
     }
     return columnCategory;
 }
 private string GetType(MSITableColumn column) {
     string currentColumnType;
     if (column.type != null) {
         if (column.type.ToString().ToLower().StartsWith("i"))
             currentColumnType = "int";
         else if(column.type.ToString().ToLower().StartsWith("v"))
             currentColumnType = "binary";
         else
             currentColumnType = "string";
     } else if (column.categorySpecified) {
         currentColumnType = GetType(column.category);
     } else {
         Log(Level.Verbose, "Must specify a valid category or type.  Defaulting to category type: s0");
         currentColumnType = "string";
     }
     return currentColumnType;
 }
 private string GetMsiColumnType(MSITableColumn column) {
     string columnType;
     if (column.type != null) {
         columnType = column.type;
     } else if (column.categorySpecified) {
         columnType = GetMsiColumnType(column.category, column.nullable);
     } else {
         if (column.nullable) {
             columnType = "S0";
         }
         else {
             columnType = "s0";
         }
     }
     return columnType;
 }
        private void AddToInsertionColumnList(MSITableColumn column, ArrayList columnList) {
            MSIRowColumnData currentColumn = new MSIRowColumnData();

            currentColumn.name = column.name;
            currentColumn.id = columnList.Count;
            currentColumn.type = GetType(column);
            columnList.Add(currentColumn);
        }
        private void AddColumnValidation(string tableName, MSITableColumn column, InstallerTable validationTable) {
            string nullability = GetNullability(column);

            string validationCategory = GetValidationCategory(column);

            int minValue;
            bool useMinValue;
            GetMinValue(column, out minValue, out useMinValue);

            int maxValue;
            bool useMaxValue;
            GetMaxValue(column, out maxValue, out useMaxValue);

            try {
                validationTable.InsertRecord(tableName, column.name, nullability,
                    (useMinValue ? (object) minValue : null),
                    (useMaxValue ? (object) maxValue : null), column.keytable,
                    (column.keycolumnSpecified ? (object) column.keycolumn : null),
                    validationCategory, column.set, column.description);
            } catch (Exception) {
                Log(Level.Warning, "_Validation table record already exists for column: " + column.name);
            }
        }