         }
     }
     
-    var name: String
-    var columns = Array<Column>()
+    public var name: String
+    public var columns = Array<Column>()
     
-    init(_ name: String) {
+    public init(_ name: String) {
         self.name = name
     }
 }

public protocol DBObject {}

public class Table: DBObject {
    class Column: DBObject, CustomDebugStringConvertible {
        
        typealias DBType = Type
        typealias BaseInt = Int
        typealias BaseFloat = Float
        typealias BaseString = String
        enum Type: String {
            case String = "text"
            case Int = "int"
            case Decimal = "decimal"

            }
        }
        
        public var `default`: Any?
        public var name: String
        public var type: Type?
        public var PK = false
        public var unique = false
        public var nullable = true
        public var length: Int?
        
        public var table: String?
        
        public init(name: String, type: Type, _ block: ((Column) -> (Void))? = nil) {
            self.name = name
            self.type = type
            block?(self)
        }
        public init(name: String, type: Type, table: String) {
            self.name = name
            self.type = type
            self.table = table
        }
        public init(name: String, table: String, _ block: ((Column) -> (Void))? = nil) {
            self.name = name
            self.table = table
            block?(self)
        }
        
        public var debugDescription: String {
            return "Column(name: \(self.name), type: \(self.type!.rawValue), primary: \(self.PK), nullable: \(self.nullable))"
        }
    }
