コード例 #1
0
ファイル: ddldbdiff.php プロジェクト: roncemer/pfmgr2
if (($res = YAMLDDLParser::loadAllDDLFiles($ddlDir, $allCurrentDDL)) != 0) {
    exit($res);
}
$mapTargetTableNames = MyConnectionFactory::getMapTargetTableNames($connectionName, $connectionParamsByName, $allCurrentDDL);
unset($allCurrentDDL, $res);
if (!empty($mapTargetTableNames)) {
    if (!empty($allowedTableNames)) {
        $allowedTableNames = array_intersect($allowedTableNames, $mapTargetTableNames);
    } else {
        $allowedTableNames = $mapTargetTableNames;
    }
}
// Load the DDL from the database, filtering out all non-allowed tables.
$db = MyConnectionFactory::getConnection($connectionName);
$dialect = $db->getDialect();
$loader = new ConnectionDDLLoader();
$databaseDDL = $loader->loadDDL($db, false, $databaseAllowedTableNames);
$db->close();
// Load the current DDL from the DDL files.
$currentDDL = new DDL(array());
if (($res = YAMLDDLParser::loadAllDDLFiles($ddlDir, $currentDDL, $allowedTableNames, $dbmap)) != 0) {
    exit($res);
}
// If we have map-target tables, remove all foreign keys from the current DDL which
// reference tables which are not map targets (because those tables should not exist
// in this database).
if (!empty($mapTargetTableNames)) {
    $anyDeleted = false;
    for ($i = 0, $n = count($currentDDL->topLevelEntities); $i < $n; $i++) {
        if ($currentDDL->topLevelEntities[$i] instanceof DDLForeignKey && !in_array($currentDDL->topLevelEntities[$i]->foreignTableName, $mapTargetTableNames)) {
            unset($currentDDL->topLevelEntities[$i]);
コード例 #2
0
ファイル: ddlexport.php プロジェクト: roncemer/pfmgr2
        case 3:
            $dbDatabase = $arg;
            $argState++;
            break;
        case 4:
            $allowedTableNames[] = $arg;
            break;
            // remain in this state
    }
}
if ($argState != 4) {
    usage();
    exit(1);
}
switch ($dialect) {
    case 'mysql':
        $db = new MySQLiConnection($dbServer, $dbUsername, $dbPassword, $dbDatabase);
        break;
    case 'pgsql':
        $db = new PostgreSQLConnection($dbServer, $dbUsername, $dbPassword, $dbDatabase);
        break;
    default:
        fprintf(STDERR, "Unsupported dialect: %s\n", $dialect);
}
$loader = new ConnectionDDLLoader();
$ddl = $loader->loadDDL($db, $generateInserts, $allowedTableNames);
///print_r($ddl);
$db->close();
$serializer = new YAMLDDLSerializer();
echo $serializer->serialize($ddl);
exit(0);
コード例 #3
0
ファイル: gen.include.php プロジェクト: roncemer/pfmgr2
function getTableDDL($tableName, $_ddlDir = null)
{
    global $ddlFromDB, $dbClass, $dbHost, $dbUser, $dbPassword, $dbDatabase, $ddlDir;
    $ddl = new DDL();
    if ($ddlFromDB) {
        // Load DDL from database.
        if (!class_exists($dbClass, false)) {
            include dirname(dirname(__FILE__)) . '/phpdaogen/' . $dbClass . '.class.php';
        }
        $db = new $dbClass($dbHost, $dbUser, $dbPassword, $dbDatabase);
        $loader = new ConnectionDDLLoader();
        $tmpddl = $loader->loadDDL($db, false, array($tableName));
        $db->close();
        mergeDDLForTable($ddl, $tmpddl, $tableName);
        unset($tmpddl);
    } else {
        // Load DDL from DDL file(s).
        if ($_ddlDir === null) {
            $_ddlDir = $ddlDir;
        }
        if (($dp = @opendir($_ddlDir)) !== false) {
            while (($fn = readdir($dp)) !== false) {
                if ($fn == '.' || $fn == '..') {
                    continue;
                }
                $fn = $_ddlDir . '/' . $fn;
                if (is_dir($fn)) {
                    if (($tmpddl = getTableDDL($tableName, $fn)) !== false) {
                        mergeDDLForTable($ddl, $tmpddl, $tableName);
                        unset($tmpddl);
                    }
                    continue;
                }
                if (is_file($fn) && strtolower(substr($fn, -9)) == '.ddl.yaml' || strtolower(substr($fn, -8)) == '.ddl.yml') {
                    try {
                        $parser = new YAMLDDLParser();
                        if (($tmpddl = $parser->parseFromYAML(file_get_contents($fn))) !== false) {
                            mergeDDLForTable($ddl, $tmpddl, $tableName);
                            unset($tmpddl);
                        }
                        unset($tmpddl);
                        continue;
                    } catch (Exception $ex) {
                        fprintf(STDERR, "%s\n%s\n", $ex->getMessage(), $ex->getTrace());
                        if ($exitval == 0) {
                            $exitval = 2;
                        }
                    }
                }
            }
            closedir($dp);
        }
    }
    return $ddl;
}
コード例 #4
0
ファイル: daogen.php プロジェクト: roncemer/pfmgr2
}
//echo "includeDirnameCount=$includeDirnameCount\n";
//echo "includeClassPathPrefix=$includeClassPathPrefix\n";
if ($haveDB) {
    switch ($dialect) {
        case 'mysql':
            $db = new MySQLiConnection($dbServer, $dbUsername, $dbPassword, $dbDatabase);
            break;
        case 'pgsql':
            $db = new PostgreSQLConnection($dbServer, $dbUsername, $dbPassword, $dbDatabase);
            break;
        default:
            fprintf(STDERR, "Unsupported dialect: %s\n", $dialect);
            exit(1);
    }
    $loader = new ConnectionDDLLoader();
    $ddl = $loader->loadDDL($db, false, $allowedTableNames);
    $db->close();
    unset($db);
} else {
    // Load new DDL from DDL file(s).
    $aggregateDDL = new DDL();
    $res = YAMLDDLParser::loadAllDDLFiles($ddlDir, $aggregateDDL, $allowedTableNames);
    if ($res != 0) {
        exit($res);
    }
    $ddl = $aggregateDDL;
    unset($aggregateDDL);
}
///print_r($ddl);
$generator = new DAOClassGenerator();