? spatial_fields.patch
? sites/default/files
? sites/default/private
? sites/default/settings.php
Index: includes/database/mysql/schema.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/mysql/schema.inc,v
retrieving revision 1.27
diff -u -p -r1.27 schema.inc
--- includes/database/mysql/schema.inc	29 Sep 2009 15:13:54 -0000	1.27
+++ includes/database/mysql/schema.inc	11 Nov 2009 10:06:12 -0000
@@ -215,6 +215,8 @@ class DatabaseSchema_mysql extends Datab
       'datetime:normal' => 'DATETIME',
 
       'time:normal'     => 'TIME',
+      
+      'geometry:normal'	=> 'GEOMETRY',
     );
     return $map;
   }
Index: includes/database/pgsql/schema.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/pgsql/schema.inc,v
retrieving revision 1.21
diff -u -p -r1.21 schema.inc
--- includes/database/pgsql/schema.inc	29 Sep 2009 15:13:54 -0000	1.21
+++ includes/database/pgsql/schema.inc	11 Nov 2009 10:06:13 -0000
@@ -257,7 +257,16 @@ class DatabaseSchema_pgsql extends Datab
       'serial:medium' => 'serial',
       'serial:big' => 'bigserial',
       'serial:normal' => 'serial',
-      );
+    );
+    
+    $result = db_query("SELECT 1 as postgis FROM pg_catalog.pg_proc WHERE proname = 'postgis_version'");
+    if (count($result)) {
+    	$map['geometry:normal'] = 'geometry';
+    }
+    else {
+    	$map['geometry:normal'] = 'bytea';
+    }
+    
     return $map;
   }
 
Index: modules/simpletest/tests/database_test.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.test,v
retrieving revision 1.72
diff -u -p -r1.72 database_test.test
--- modules/simpletest/tests/database_test.test	26 Oct 2009 04:46:38 -0000	1.72
+++ modules/simpletest/tests/database_test.test	11 Nov 2009 10:07:27 -0000
@@ -2993,6 +2993,54 @@ class DatabaseExtraTypesTestCase extends
      }
 
   }
+  
+  /**
+   * Test the geometry data type.
+   */
+   function testGeometryField() {
+     try {
+       $geometry_table = array(
+         'fields' => array(
+           'geometry_field' => array(
+             'description' => t('Test Geometry field'),
+             'type' => 'geometry',
+             'not null' => FALSE,
+           ),
+         ),
+       );
+       db_create_table('geometry_table', $geometry_table);
+       $this->assertTrue(db_table_exists('geometry_table'), t('Created table with geometry field'));
+
+			 // Binary representations of 'POINT(1 1)', 'LINESTRING(3 4,10 50,20 25)', and 'POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,3 2,3 3,2 3,2 2))'
+			 $wkb_point = pack('H*','000000000101000000000000000000f03f000000000000f03f');
+			 $wkb_linestring = pack('H*','00000000010200000003000000000000000000084000000000000010400000000000002440000000000000494000000000000034400000000000003940');
+			 $wkb_polygon = pack('H*','0000000001030000000200000005000000000000000000f03f000000000000f03f0000000000001440000000000000f03f00000000000014400000000000001440000000000000f03f0000000000001440000000000000f03f000000000000f03f050000000000000000000040000000000000004000000000000008400000000000000040000000000000084000000000000008400000000000000040000000000000084000000000000000400000000000000040');
+
+       db_insert('geometry_table')->fields(array('geometry_field'))
+         ->values(array('geometry_field' => $wkb_point))
+         ->values(array('geometry_field' => $wkb_linestring))
+         ->values(array('geometry_field' => $wkb_polygon))
+         ->execute();
+
+       $num_records = (int) db_query('SELECT COUNT(*) FROM {geometry_table}')->fetchField();
+       $this->assertEqual($num_records, 3, t('Inserted 3 records, and counted 3 records'));
+       $res = db_query('SELECT asText(geometry_field) as geometry_field from {geometry_table} ORDER BY asText(geometry_field)');
+
+       $wkt = $res->fetch()->geometry_field;
+       $this->assertEqual($wkt, 'LINESTRING(3 4,10 50,20 25)', t('Geometry retrieved in order @wkt', array('@wkt' => $wkt)));
+       $wkt = $res->fetch()->geometry_field;
+       $this->assertEqual($wkt, 'POINT(1 1)', t('Geometry retrieved in order @wkt', array('@wkt' => $wkt)));
+       $wkt = $res->fetch()->geometry_field;
+       $this->assertEqual($wkt, 'POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,3 2,3 3,2 3,2 2))', t('Geometry retrieved in order @wkt', array('@wkt' => $wkt)));
+
+       db_drop_table('geometry_table');
+       $this->assertFalse(db_table_exists('geometry_table'), t('Dropped table with geometry field'));
+
+     } catch (Exception $e) {
+       $this->fail($e->getMessage());
+     }
+
+   }
 
 }
 
