/// <summary>
 /// Creates the O auth token table if needed.
 /// </summary>
 /// <param name="db">The db.</param>
 private void CreateOAuthTokenTableIfNeeded(DapperContext db)
 {
     if (!db.TableExists(OAuthTokenTableName))
     {
         db.ExecuteSchema(
             string.Format(
                 "create table {0} (Secret varchar(128) not null, Token varchar(128) not null primary key)",
                 this.OAuthTokenTableName));
     }
 }
        /// <summary>
        /// Ensures the schema.
        /// </summary>
        protected virtual void EnsureSchema()
        {
            var phunDataSchema = string.Format(
            @"CREATE TABLE {0}Data(
            IdString    varchar(38) NOT NULL PRIMARY KEY,
            Host        varchar(200) NOT NULL,
            Path        varchar(250) NOT NULL,
            Data        bytea,
            DataLength  bigint,
            CreateDate  timestamp,
            CreateBy    varchar(50)
            )
            GO
            CREATE INDEX IX_{0}Data_Host ON {0}Data (Host)
            GO
            CREATE INDEX IX_{0}Data_Path ON {0}Data (Path)
            ",
            this.TableName);
            using (var db = new DapperContext(this.ConnectionStringName))
            {
                if (this.DataRepository is SqlDataRepository)
                {
                    var dataTableExists =
                        db.Query<string>(
                            string.Format(
                                @"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{0}Data'",
                                this.TableName), null).Any();
                    if (!dataTableExists)
                    {
                        foreach (var sql in
                            phunDataSchema.Split(new string[] { "GO" }, StringSplitOptions.RemoveEmptyEntries))
                        {
                            db.ExecuteSchema(sql);
                        }
                    }
                }

                if (db.Query<string>(string.Format(@"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{0}'", this.TableName), null).Any())
                {
                    return;
                }

                foreach (var sql in this.SchemaSql.Split(new string[] { "GO" }, StringSplitOptions.RemoveEmptyEntries))
                {
                    db.ExecuteSchema(sql);
                }
            }
        }