/**
  * Override for the default SQL generation functions, MSSQL-specific field generation function
  * 
  * The Microsoft SQL Server PHP module is retarded, and for some reason 
  * decides to cast anything as DEFAULT NULL unless you specify them just as 
  * NULL. Specifying DEFAULT NULL doesn't work. This is contrary to the 
  * actual SQL Server Studio tool, which actually works like it should. 
  * 
  * WTF? Seriously, I just wasted like 4 hours trying to figure out what I 
  * did wrong, and it turns out the stupid module is just stupid. 
  * 
  * @param string $name
  * @param array $def
  * @return string
  */
 protected function _generateFieldSchema($name, $def)
 {
     $sql = '';
     switch ($def[0]) {
         case QUICKBOOKS_DRIVER_SQL_SERIAL:
             $sql = $name . ' integer NOT NULL IDENTITY(1, 1) ';
             // AUTO_INCREMENT
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_TIMESTAMP:
         case QUICKBOOKS_DRIVER_SQL_TIMESTAMP_ON_INSERT_OR_UPDATE:
         case QUICKBOOKS_DRIVER_SQL_TIMESTAMP_ON_UPDATE:
             $sql = $name . ' TIMESTAMP ';
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_DATETIME:
         case QUICKBOOKS_DRIVER_SQL_DATE:
             $sql = $name . ' DATETIME ';
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' NULL ';
                 }
             } else {
                 $sql .= ' NOT NULL ';
             }
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_VARCHAR:
             $sql = $name . ' VARCHAR';
             /*if ($name == 'ListID')
             		{
             			print('LIST ID:');
             			print_r($def);
             		}*/
             if (!empty($def[1])) {
                 $sql .= '(' . (int) $def[1] . ') ';
             }
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' NULL ';
                 } else {
                     if ($def[2] === false) {
                         $sql .= ' NOT NULL ';
                     } else {
                         $sql .= " NOT NULL DEFAULT '" . $def[2] . "' ";
                     }
                 }
             } else {
                 $sql .= ' NOT NULL ';
             }
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_CHAR:
             $sql = $name . ' CHAR';
             if (!empty($def[1])) {
                 $sql .= '(' . (int) $def[1] . ') ';
             }
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' NULL ';
                 } else {
                     $sql .= " NOT NULL DEFAULT '" . $def[2] . "' ";
                 }
             } else {
                 $sql .= ' NOT NULL ';
             }
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_TEXT:
             $sql = $name . ' TEXT ';
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' NULL ';
                 } else {
                     $sql .= " NOT NULL DEFAULT '" . $def[2] . "' ";
                 }
             } else {
                 $sql .= ' NOT NULL ';
             }
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_INTEGER:
             $sql = $name . ' INTEGER ';
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' NULL ';
                 } else {
                     $sql .= ' DEFAULT ' . (int) $def[2];
                 }
             }
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_BOOLEAN:
             $sql = $name . ' tinyint ';
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' NULL ';
                 } else {
                     if ($def[2]) {
                         $sql .= ' DEFAULT 1 ';
                     } else {
                         $sql .= ' DEFAULT 0 ';
                     }
                 }
             }
             return $sql;
             /*case QUICKBOOKS_DRIVER_SQL_INTEGER:
             		$sql = $name . ' int(10) unsigned ';
             		
             		if (isset($def[2]))
             		{
             			if (strtolower($def[2]) == 'null')
             			{
             				$sql .= ' DEFAULT NULL ';
             			}
             			else
             			{
             				$sql .= ' DEFAULT ' . (int) $def[2];
             			}
             		}
             		else
             		{
             			$sql .= ' NOT NULL ';
             		}
             		
             		return $sql;*/
         /*case QUICKBOOKS_DRIVER_SQL_INTEGER:
         		$sql = $name . ' int(10) unsigned ';
         		
         		if (isset($def[2]))
         		{
         			if (strtolower($def[2]) == 'null')
         			{
         				$sql .= ' DEFAULT NULL ';
         			}
         			else
         			{
         				$sql .= ' DEFAULT ' . (int) $def[2];
         			}
         		}
         		else
         		{
         			$sql .= ' NOT NULL ';
         		}
         		
         		return $sql;*/
         default:
             return parent::_generateFieldSchema($name, $def);
     }
 }
 /**
  * Override for the default SQL generation functions, MySQL-specific field generation function
  * 
  * @param string $name
  * @param array $def
  * @return string
  */
 protected function _generateFieldSchema($name, $def)
 {
     switch ($def[0]) {
         case QUICKBOOKS_DRIVER_SQL_SERIAL:
             $sql = $name . ' int(10) unsigned NOT NULL ';
             // AUTO_INCREMENT
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_TIMESTAMP:
         case QUICKBOOKS_DRIVER_SQL_TIMESTAMP_ON_INSERT_OR_UPDATE:
             $sql = $name . ' TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ';
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_TIMESTAMP_ON_UPDATE:
             $sql = $name . ' TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP ';
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_TIMESTAMP_ON_INSERT:
             $sql = $name . ' TIMESTAMP DEFAULT CURRENT_TIMESTAMP ';
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_BOOLEAN:
             $sql = $name . ' tinyint(1) ';
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' DEFAULT NULL ';
                 } else {
                     if ($def[2]) {
                         $sql .= ' DEFAULT 1 ';
                     } else {
                         $sql .= ' DEFAULT 0 ';
                     }
                 }
             }
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_INTEGER:
             $sql = $name . ' int(10) unsigned ';
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' DEFAULT NULL ';
                 } else {
                     $sql .= ' DEFAULT ' . (int) $def[2];
                 }
             } else {
                 $sql .= ' NOT NULL ';
             }
             return $sql;
         default:
             return parent::_generateFieldSchema($name, $def);
     }
 }
 /**
  * Override for the default SQL generation functions, PostgreSQL-specific field generation function
  * 
  * @param string $name
  * @param array $def
  * @return string
  */
 protected function _generateFieldSchema($name, $def)
 {
     switch ($def[0]) {
         case QUICKBOOKS_DRIVER_SQL_SERIAL:
             $sql = $name . ' SERIAL NOT NULL ';
             // AUTO_INCREMENT
             return $sql;
         case QUICKBOOKS_DRIVER_SQL_DATETIME:
             $sql = $name . ' timestamp without time zone ';
             if (isset($def[2])) {
                 if (strtolower($def[2]) == 'null') {
                     $sql .= ' DEFAULT NULL ';
                 } else {
                     $sql .= ' DEFAULT ' . $def[2] . ' NOT NULL ';
                 }
             } else {
                 $sql .= ' NOT NULL ';
             }
             return $sql;
         default:
             return parent::_generateFieldSchema($name, $def);
     }
 }