$major || ($v[0]==$major && $v[1]>=$minor)) { $capabilities |= self::JSON; } $extensions = pg_fetch_all(pg_query($db, "SELECT * FROM pg_extension;")); foreach ($extensions as $extension) { if ($extension['extname'] === 'postgis') { $capabilities |= self::GIS; } } return $capabilities; } /** * Seeds the database for this connection * * @return void */ public function seedDatabase($db, $capabilities) { $fixture = __DIR__.'/data/blog_postgresql.sql'; $contents = file_get_contents($fixture); if (!($capabilities & self::GIS)) { $contents = preg_replace('/(geometry)( NOT)? NULL/i', 'text\2 NULL', $contents); $contents = preg_replace('/ST_GeomFromText/i', 'concat', $contents); $contents = preg_replace('/CREATE EXTENSION IF NOT EXISTS postgis;/i', '', $contents); } if (!($capabilities & self::JSON)) { $contents = preg_replace('/JSONB? NOT NULL/i', 'text NOT NULL', $contents); } $queries = preg_split('/;\s*\n/', $contents); array_pop($queries); foreach ($queries as $i=>$query) { if (!pg_query($db, $query.';')) { $i++; die("Loading '$fixture' failed on statemement #$i with error:\n".print_r(pg_last_error($db), true)."\n"); } } } }