<commit_before><?php
/**
 * Copyright (c) 2012 <NAME> <<EMAIL>>
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */

class OC_DB_MDB2SchemaReader {
	static protected $DBNAME;
	static protected $DBTABLEPREFIX;
	static protected $platform;

	/**
	 * @param $file
	 * @param $platform
	 * @return \Doctrine\DBAL\Schema\Schema
	 * @throws DomainException
	 */
	public static function loadSchemaFromFile($file, $platform) {
		self::$DBNAME  = OC_Config::getValue( "dbname", "owncloud" );
		self::$DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" );
		self::$platform = $platform;
		$schema = new \Doctrine\DBAL\Schema\Schema();
		$xml = simplexml_load_file($file);
		foreach($xml->children() as $child) {
			switch($child->getName()) {
				case 'name':
				case 'create':
				case 'overwrite':
				case 'charset':
					break;
				case 'table':
					self::loadTable($schema, $child);
					break;
				default:
					throw new DomainException('Unknown element: '.$child->getName());

			}
		}
		return $schema;
	}

	/**
	 * @param\Doctrine\DBAL\Schema\Schema $schema
	 * @param $xml
	 * @throws DomainException
	 */
	private static function loadTable($schema, $xml) {
		foreach($xml->children() as $child) {
			switch($child->getName()) {
				case 'name':
					$name = (string)$child;
					$name = str_replace( '*dbprefix*', self::$DBTABLEPREFIX, $name );
					$name = self::$platform->quoteIdentifier($name);
					$table = $schema->createTable($name);
					break;
				case 'create':
				case 'overwrite':
				case 'charset':
					break;
				case 'declaration':
					self::loadDeclaration($table, $child);
					break;
				default:
					throw new DomainException('Unknown element: '.$child->getName());

			}
		}
	}

	/**
	 * @param \Doctrine\DBAL\Schema\Table $table
	 * @param $xml
	 * @throws DomainException
	 */
	private static function loadDeclaration($table, $xml) {
		foreach($xml->children() as $child) {
			switch($child->getName()) {
				case 'field':
					self::loadField($table, $child);
					break;
				case 'index':
					self::loadIndex($table, $child);
					break;
				default:
					throw new DomainException('Unknown element: '.$child->getName());

			}
		}
	}

	private static function loadField($table, $xml) {
		$options = array();
		foreach($xml->children() as $child) {
			switch($child->getName()) {
				case 'name':
					$name = (string)$child;
					$name = self::$platform->quoteIdentifier($name);
					break;
				case 'type':
					$type = (string)$child;
					switch($type) {
						case 'text':
							$type = 'string';
							break;
						case 'clob':
							$type = 'text';
							break;
						case 'timestamp':
							$type = 'datetime';
							break;
						// TODO
						return;
					}
					break;
				case 'length':
					$length = (string)$child;
					$options['length'] = $length;
					break;
				case 'unsigned':
					$unsigned = self::asBool($child);
					$options['unsigned'] = $unsigned;
					break;
				case 'notnull':
					$notnull = self::asBool($child);
					$options['notnull'] = $notnull;
					break;
				case 'autoincrement':
					$autoincrement = self::asBool($child);
					$options['autoincrement'] = $autoincrement;
					break;
				case 'default':
					$default = (string)$child;
					$options['default'] = $default;
					break;
				case 'comments':
					$comment = (string)$child;
					$options['comment'] = $comment;
					break;
				default:
					throw new DomainException('Unknown element: '.$child->getName());

			}
		}
		if (isset($name) && isset($type)) {<commit_msg>add support for the <primary/> element within field definitions<commit_after><?php
/**
 * Copyright (c) 2012 <NAME> <<EMAIL>>
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */

class OC_DB_MDB2SchemaReader {
	static protected $DBNAME;
	static protected $DBTABLEPREFIX;
	static protected $platform;

	/**
	 * @param $file
	 * @param $platform
	 * @return \Doctrine\DBAL\Schema\Schema
	 * @throws DomainException
	 */
	public static function loadSchemaFromFile($file, $platform) {
		self::$DBNAME  = OC_Config::getValue( "dbname", "owncloud" );
		self::$DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" );
		self::$platform = $platform;
		$schema = new \Doctrine\DBAL\Schema\Schema();
		$xml = simplexml_load_file($file);
		foreach($xml->children() as $child) {
			switch($child->getName()) {
				case 'name':
				case 'create':
				case 'overwrite':
				case 'charset':
					break;
				case 'table':
					self::loadTable($schema, $child);
					break;
				default:
					throw new DomainException('Unknown element: '.$child->getName());

			}
		}
		return $schema;
	}

	/**
	 * @param\Doctrine\DBAL\Schema\Schema $schema
	 * @param $xml
	 * @throws DomainException
	 */
	private static function loadTable($schema, $xml) {
		foreach($xml->children() as $child) {
			switch($child->getName()) {
				case 'name':
					$name = (string)$child;
					$name = str_replace( '*dbprefix*', self::$DBTABLEPREFIX, $name );
					$name = self::$platform->quoteIdentifier($name);
					$table = $schema->createTable($name);
					break;
				case 'create':
				case 'overwrite':
				case 'charset':
					break;
				case 'declaration':
					self::loadDeclaration($table, $child);
					break;
				default:
					throw new DomainException('Unknown element: '.$child->getName());

			}
		}
	}

	/**
	 * @param \Doctrine\DBAL\Schema\Table $table
	 * @param $xml
	 * @throws DomainException
	 */
	private static function loadDeclaration($table, $xml) {
		foreach($xml->children() as $child) {
			switch($child->getName()) {
				case 'field':
					self::loadField($table, $child);
					break;
				case 'index':
					self::loadIndex($table, $child);
					break;
				default:
					throw new DomainException('Unknown element: '.$child->getName());

			}
		}
	}

	private static function loadField($table, $xml) {
		$options = array();
		foreach($xml->children() as $child) {
			switch($child->getName()) {
				case 'name':
					$name = (string)$child;
					$name = self::$platform->quoteIdentifier($name);
					break;
				case 'type':
					$type = (string)$child;
					switch($type) {
						case 'text':
							$type = 'string';
							break;
						case 'clob':
							$type = 'text';
							break;
						case 'timestamp':
							$type = 'datetime';
							break;
						// TODO
						return;
					}
					break;
				case 'length':
					$length = (string)$child;
					$options['length'] = $length;
					break;
				case 'unsigned':
					$unsigned = self::asBool($child);
					$options['unsigned'] = $unsigned;
					break;
				case 'notnull':
					$notnull = self::asBool($child);
					$options['notnull'] = $notnull;
					break;
				case 'autoincrement':
					$autoincrement = self::asBool($child);
					$options['autoincrement'] = $autoincrement;
					break;
				case 'default':
					$default = (string)$child;
					$options['default'] = $default;
					break;
				case 'comments':
					$comment = (string)$child;
					$options['comment'] = $comment;
					break;
				case 'primary':
					$primary = self::asBool($child);
					$options['primary'] = $primary;
					break;
				default:
					throw new DomainException('Unknown element: '.$child->getName());

			}
		}
		if (isset($name) && isset($type)) {
{'fraction_non_alphanumeric': 0.16737028462481274, 'fraction_numerical': 0.0016342094511779927, 'mean_word_length': 3.052980132450331, 'pattern_counts': {'":': 0, '<': 12, '<?xml version=': 0, '>': 40, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 22}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2459464', 'n_tokens_mistral': 3045, 'n_tokens_neox': 2283, 'n_words': 535}