isc.DataSource.create({
    ID:"DataSourceStore",
    fields:{
        ID:{
            name:"ID",
            primaryKey:true
        },
        version:{
            name:"version"
        },
        dsXML:{
            length:"50000",
            name:"dsXML",
            type:"text"
        },
        config:{
            hidden:true,
            name:"config"
        },
        dbName:{
            hidden:true,
            name:"dbName"
        },
        tableName:{
            hidden:true,
            name:"tableName"
        },
        schema:{
            hidden:true,
            name:"schema"
        },
        sql:{
            hidden:true,
            name:"sql"
        },
        ds:{
            hidden:true,
            name:"ds",
            type:"DataSource"
        }
    },
    operationBindings:[
        {
            language:"groovy",
            operationId:"dsFromSQL",
            operationType:"custom",
            script:"\n            if (!com.isomorphic.auth.DevModeAuthFilter.devModeAuthorized(request)) throw new Exception(\"Not Authorized\");\n            import com.isomorphic.sql.*;\n           \n            def dsId = values.dbName+\"_devSqlBrowser_\"+System.currentTimeMillis();\n            def conn = SQLConnectionManager.getConnection(values.dbName);\n            def ds = SQLDataSource.fromTable(conn, null, values.schema, dsId, \"sql\", values.dbName,\n                        [operationType:\"fetch\", customSQL: values.sql], true, null);\n            SQLConnectionManager.free(conn);\n\n/*\n            def ds = DataSource.fromConfig([\n                ID: dsId,\n                dbName: values.dbName,\n                serverType: \"sql\",\n                autoDeriveSchema: \"true\",\n                operationBindings: [\n                    [type: \"fetch\", autoDeriveSchemaOperation: \"true\", tableClause: values.sql]\n                ]\n            ]);\n*/\n            return [ds:ds];\n	    "
        },
        {
            language:"groovy",
            operationId:"dsFromTable",
            operationType:"custom",
            script:"\n            if (!com.isomorphic.auth.DevModeAuthFilter.devModeAuthorized(request)) throw new Exception(\"Not Authorized\");\n            import com.isomorphic.sql.*;\n\n            def dsId = values.dbName+\"_\"+values.tableName+\"_devTableBrowser_\"+System.currentTimeMillis();\n            def ds = SQLDataSource.fromTable(null, values.tableName, values.schema, dsId, \"sql\", values.dbName);\n            return [ds:ds, dsXML:ds.toXML()];\n	    "
        },
        {
            language:"groovy",
            operationId:"dsFromConfig",
            operationType:"custom",
            script:"\n            if (!com.isomorphic.auth.DevModeAuthFilter.devModeAuthorized(request)) throw new Exception(\"Not Authorized\");\n            import com.isomorphic.store.*;\n            import com.isomorphic.datasource.*;\n\n            def ds = DataSource.fromConfig(values.config);\n            if (ds != null) {\n                DataStructCache.addCachedObjectWithNoConfigFile(ds.getName(), ds);\n            }\n            return [ds:ds, dsXML: ds.toXML()];\n	    "
        }
    ]
})
