class JDOMetaContext implements MetaContext {

    MetaColumn getColumnByQualifiedName(String dataSourceName, String schemaName, String tableName, String columnName) throws MetaException {
        try {
            Query query = pm.newQuery(MColumn.class);
            query.setFilter("name == columnName && "
                    + "table.name == tableName && "
                    + "table.schema.name == schemaName && "
                    + "table.schema.dataSource.name == dataSourceName");
            query.declareParameters("String dataSourceName, String schemaName, String tableName, String columnName");
            query.setUnique(true);

            MColumn mColumn = (MColumn) query.executeWithArray(dataSourceName, schemaName, tableName, columnName);
            if (mColumn == null)
                throw new MetaException("column '" + dataSourceName + "." + schemaName + "." + tableName + "." + columnName + "' does not exist");
            return mColumn;
        } catch (RuntimeException e) {
            throw new MetaException("failed to get column '" + dataSourceName + "." + schemaName + "." + tableName + "." + columnName + "'", e);
        }
    }

    public  JDOMetaContext(PersistenceManager persistenceManager,
                          UpdateLoggerFactory updateLoggerFactory);

}