Stop pretending we support MySQL
This commit is contained in:
parent
4ee126a878
commit
beb0ef6357
9 changed files with 85 additions and 394 deletions
|
@ -1,13 +1,3 @@
|
|||
class Acl < ActiveRecord::Base
|
||||
scope :address, lambda { |address| where("#{inet_aton} & netmask = address", address) }
|
||||
|
||||
private
|
||||
|
||||
def self.inet_aton
|
||||
if self.connection.adapter_name == "MySQL"
|
||||
"inet_aton(?)"
|
||||
else
|
||||
"?"
|
||||
end
|
||||
end
|
||||
scope :address, lambda { |address| where("? & netmask = address", address) }
|
||||
end
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
# MySQL (default setup). Versions 4.1 and 5.0 are recommended.
|
||||
#
|
||||
# Install the MySQL driver:
|
||||
# gem install mysql
|
||||
# On MacOS X:
|
||||
# gem install mysql -- --include=/usr/local/lib
|
||||
# On Windows:
|
||||
# There is no gem for Windows. Install mysql.so from RubyForApache.
|
||||
# http://rubyforge.org/projects/rubyforapache
|
||||
#
|
||||
# And be sure to use new-style password hashing:
|
||||
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
||||
development:
|
||||
adapter: mysql
|
||||
database: openstreetmap
|
||||
username: openstreetmap
|
||||
password: openstreetmap
|
||||
host: localhost
|
||||
encoding: utf8
|
||||
|
||||
# Warning: The database defined as 'test' will be erased and
|
||||
# re-generated from your development database when you run 'rake'.
|
||||
# Do not set this db to the same as development or production.
|
||||
test:
|
||||
adapter: mysql
|
||||
database: osm_test
|
||||
username: osm_test
|
||||
password: osm_test
|
||||
host: localhost
|
||||
encoding: utf8
|
||||
|
||||
production:
|
||||
adapter: mysql
|
||||
database: osm
|
||||
username: osm
|
||||
password: osm
|
||||
host: localhost
|
||||
encoding: utf8
|
51
db/README
51
db/README
|
@ -1,58 +1,13 @@
|
|||
Creating database
|
||||
===================
|
||||
|
||||
OSM server uses a database with the following name:
|
||||
OSM server uses a Postgres database with the following name:
|
||||
|
||||
openstreetmap
|
||||
|
||||
You may create it with your preferable client or run next (linux) command:
|
||||
|
||||
$ mysql -u <uid> -p
|
||||
|
||||
(change <uid> with appropriate username of administrative user eg. root )
|
||||
|
||||
> create database openstreetmap default character set utf8;
|
||||
> exit
|
||||
|
||||
Creating user, password, and access rights
|
||||
============================================
|
||||
|
||||
$ mysql -u <uid> -p
|
||||
|
||||
(change <uid> with appropriate username of administrative user eg. root )
|
||||
|
||||
> grant all privileges on openstreetmap.* to 'openstreetmap'@'localhost' identified by 'openstreetmap';
|
||||
> flush privileges;
|
||||
> exit
|
||||
|
||||
Creating functions For MySQL
|
||||
==============================
|
||||
|
||||
Run this command in the db/functions directory:
|
||||
|
||||
$ make libmyosm.so
|
||||
|
||||
You might also need to install:
|
||||
- mysql client development libraries: $ sudo apt-get install libmysqlclient16-dev
|
||||
- ruby development libraries: $ sudo apt-get install ruby1.8-dev
|
||||
for build to succeed.
|
||||
|
||||
Make sure the db/functions directory is on the MySQL server's library
|
||||
path and restart the MySQL server.
|
||||
|
||||
On Linux the easiest way to do this is to create /etc/ld.so.conf.d/osm.conf, and place the path to the db/functions directory in it and then run the ldconfig command as root.
|
||||
|
||||
On OS X: sudo ln -s /path_to_your_osm_install/sites/rails_port/db/functions/libmyosm.so /usr/local/lib/libmyosm.so
|
||||
|
||||
Now create the functions as follows:
|
||||
|
||||
$ mysql -u <uid> -p openstreetmap
|
||||
|
||||
(change <uid> with appropriate username of administrative user eg. root )
|
||||
|
||||
> create function tile_for_point returns integer soname 'libmyosm.so';
|
||||
> create function maptile_for_point returns integer soname 'libmyosm.so';
|
||||
> exit
|
||||
$ createdb openstreetmap
|
||||
|
||||
Creating functions for PgSQL
|
||||
==============================
|
||||
|
@ -86,4 +41,4 @@ This will create the db for you
|
|||
|
||||
You will need to make sure the database connection is configured in database.yml in config directory
|
||||
You might start with example configuration provided:
|
||||
$ cp config/mysql.example.database.yml config/database.yml
|
||||
$ cp config/example.database.yml config/database.yml
|
||||
|
|
|
@ -7,26 +7,17 @@ else
|
|||
LDFLAGS=-shared
|
||||
endif
|
||||
|
||||
all: libmyosm.so libpgosm.so
|
||||
all: libpgosm.so
|
||||
|
||||
clean:
|
||||
$(RM) *.so *.o
|
||||
|
||||
libmyosm.so: quadtile-mysql.o maptile-mysql.o
|
||||
cc ${LDFLAGS} -o libmyosm.so quadtile-mysql.o maptile-mysql.o
|
||||
|
||||
libpgosm.so: quadtile-pgsql.o maptile-pgsql.o xid_to_int4-pgsql.o
|
||||
cc ${LDFLAGS} -o libpgosm.so quadtile-pgsql.o maptile-pgsql.o xid_to_int4-pgsql.o
|
||||
|
||||
quadtile-mysql.o: quadtile.c ${QTDIR}/quad_tile.h
|
||||
cc `mysql_config --include` -I${QTDIR} -fPIC -O3 -DUSE_MYSQL -c -o quadtile-mysql.o quadtile.c
|
||||
|
||||
quadtile-pgsql.o: quadtile.c ${QTDIR}/quad_tile.h
|
||||
cc -I `pg_config --includedir` -I `pg_config --includedir-server` -I${QTDIR} -fPIC -O3 -DUSE_PGSQL -c -o quadtile-pgsql.o quadtile.c
|
||||
|
||||
maptile-mysql.o: maptile.c
|
||||
cc `mysql_config --include` -fPIC -O3 -DUSE_MYSQL -c -o maptile-mysql.o maptile.c
|
||||
|
||||
maptile-pgsql.o: maptile.c
|
||||
cc -I `pg_config --includedir` -I `pg_config --includedir-server` -fPIC -O3 -DUSE_PGSQL -c -o maptile-pgsql.o maptile.c
|
||||
|
||||
|
|
|
@ -1,70 +1,4 @@
|
|||
#ifndef USE_MYSQL
|
||||
#ifndef USE_PGSQL
|
||||
#error One of USE_MYSQL or USE_PGSQL must be defined
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* The real maptile-for-point functionality is here */
|
||||
|
||||
static long long internal_maptile_for_point(double lat, double lon, long long zoom)
|
||||
{
|
||||
double scale = pow(2, zoom);
|
||||
double r_per_d = M_PI / 180;
|
||||
unsigned int x;
|
||||
unsigned int y;
|
||||
|
||||
x = floor((lon + 180.0) * scale / 360.0);
|
||||
y = floor((1 - log(tan(lat * r_per_d) + 1.0 / cos(lat * r_per_d)) / M_PI) * scale / 2.0);
|
||||
|
||||
return (x << zoom) | y;
|
||||
}
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
#ifdef USE_PGSQL
|
||||
#error ONLY one of USE_MYSQL and USE_PGSQL should be defined
|
||||
#endif
|
||||
|
||||
#include <my_global.h>
|
||||
#include <my_sys.h>
|
||||
#include <m_string.h>
|
||||
#include <mysql.h>
|
||||
|
||||
my_bool maptile_for_point_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
{
|
||||
if ( args->arg_count != 3 ||
|
||||
args->arg_type[0] != INT_RESULT ||
|
||||
args->arg_type[1] != INT_RESULT ||
|
||||
args->arg_type[2] != INT_RESULT )
|
||||
{
|
||||
strcpy( message, "Your maptile_for_point arguments are bogus!" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void maptile_for_point_deinit(UDF_INIT *initid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
long long maptile_for_point(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
|
||||
{
|
||||
double lat = *(long long *)args->args[0] / 10000000.0;
|
||||
double lon = *(long long *)args->args[1] / 10000000.0;
|
||||
long long zoom = *(long long *)args->args[2];
|
||||
|
||||
return internal_maptile_for_point(lat, lon, zoom);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_PGSQL
|
||||
#ifdef USE_MYSQL
|
||||
#error ONLY one of USE_MYSQL and USE_PGSQL should be defined
|
||||
#endif
|
||||
|
||||
#include <postgres.h>
|
||||
#include <fmgr.h>
|
||||
|
||||
|
@ -74,8 +8,15 @@ maptile_for_point(PG_FUNCTION_ARGS)
|
|||
double lat = PG_GETARG_INT64(0) / 10000000.0;
|
||||
double lon = PG_GETARG_INT64(1) / 10000000.0;
|
||||
int zoom = PG_GETARG_INT32(2);
|
||||
double scale = pow(2, zoom);
|
||||
double r_per_d = M_PI / 180;
|
||||
unsigned int x;
|
||||
unsigned int y;
|
||||
|
||||
PG_RETURN_INT32(internal_maptile_for_point(lat, lon, zoom));
|
||||
x = floor((lon + 180.0) * scale / 360.0);
|
||||
y = floor((1 - log(tan(lat * r_per_d) + 1.0 / cos(lat * r_per_d)) / M_PI) * scale / 2.0);
|
||||
|
||||
PG_RETURN_INT32((x << zoom) | y);
|
||||
}
|
||||
|
||||
PG_FUNCTION_INFO_V1(maptile_for_point);
|
||||
|
@ -93,5 +34,3 @@ PG_FUNCTION_INFO_V1(maptile_for_point);
|
|||
#ifdef PG_MODULE_MAGIC
|
||||
PG_MODULE_MAGIC;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,54 +1,5 @@
|
|||
#ifndef USE_MYSQL
|
||||
#ifndef USE_PGSQL
|
||||
#error One of USE_MYSQL or USE_PGSQL must be defined
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
#include <quad_tile.h>
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
#ifdef USE_PGSQL
|
||||
#error ONLY one of USE_MYSQL and USE_PGSQL should be defined
|
||||
#endif
|
||||
|
||||
#include <my_global.h>
|
||||
#include <my_sys.h>
|
||||
#include <m_string.h>
|
||||
#include <mysql.h>
|
||||
|
||||
my_bool tile_for_point_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
{
|
||||
if ( args->arg_count != 2 ||
|
||||
args->arg_type[0] != INT_RESULT ||
|
||||
args->arg_type[1] != INT_RESULT )
|
||||
{
|
||||
strcpy( message, "Your tile_for_point arguments are bogus!" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tile_for_point_deinit(UDF_INIT *initid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
long long tile_for_point(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
|
||||
{
|
||||
long long lat = *(long long *)args->args[0];
|
||||
long long lon = *(long long *)args->args[1];
|
||||
|
||||
return xy2tile(lon2x(lon / 10000000.0), lat2y(lat / 10000000.0));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_PGSQL
|
||||
#ifdef USE_MYSQL
|
||||
#error ONLY one of USE_MYSQL and USE_PGSQL should be defined
|
||||
#endif
|
||||
|
||||
#include <postgres.h>
|
||||
#include <fmgr.h>
|
||||
|
||||
|
@ -72,5 +23,3 @@ PG_FUNCTION_INFO_V1(tile_for_point);
|
|||
*
|
||||
* (without all the *s)
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,14 +1,3 @@
|
|||
#ifndef USE_MYSQL
|
||||
#ifndef USE_PGSQL
|
||||
#error One of USE_MYSQL or USE_PGSQL must be defined
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef USE_PGSQL
|
||||
#ifdef USE_MYSQL
|
||||
#error ONLY one of USE_MYSQL and USE_PGSQL should be defined
|
||||
#endif
|
||||
|
||||
#include <postgres.h>
|
||||
#include <fmgr.h>
|
||||
|
||||
|
@ -26,5 +15,3 @@ int xid_to_int4(TransactionId xid)
|
|||
*
|
||||
* (without all the *s)
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
|
@ -42,87 +42,6 @@ module ActiveRecord
|
|||
end
|
||||
end
|
||||
|
||||
if defined?(ActiveRecord::ConnectionAdapters::MysqlAdapter)
|
||||
class MysqlAdapter
|
||||
alias_method :old_native_database_types, :native_database_types
|
||||
|
||||
def native_database_types
|
||||
types = old_native_database_types
|
||||
types[:bigint] = { :name => "bigint", :limit => 20 }
|
||||
types[:double] = { :name => "double" }
|
||||
types[:integer_pk] = { :name => "integer DEFAULT NULL auto_increment PRIMARY KEY" }
|
||||
types[:bigint_pk] = { :name => "bigint(20) DEFAULT NULL auto_increment PRIMARY KEY" }
|
||||
types[:bigint_pk_64] = { :name => "bigint(64) DEFAULT NULL auto_increment PRIMARY KEY" }
|
||||
types[:bigint_auto_64] = { :name => "bigint(64) DEFAULT NULL auto_increment" }
|
||||
types[:bigint_auto_11] = { :name => "bigint(11) DEFAULT NULL auto_increment" }
|
||||
types[:bigint_auto_20] = { :name => "bigint(20) DEFAULT NULL auto_increment" }
|
||||
types[:four_byte_unsigned] = { :name=> "integer unsigned" }
|
||||
types[:inet] = { :name=> "integer unsigned" }
|
||||
|
||||
enumerations.each do |e,v|
|
||||
types[e.to_sym]= { :name => "enum('#{v.join '\',\''}')" }
|
||||
end
|
||||
|
||||
types
|
||||
end
|
||||
|
||||
def change_column(table_name, column_name, type, options = {})
|
||||
unless options_include_default?(options)
|
||||
options[:default] = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Default"]
|
||||
|
||||
unless type == :string or type == :text
|
||||
options.delete(:default) if options[:default] = "";
|
||||
end
|
||||
end
|
||||
|
||||
change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
|
||||
add_column_options!(change_column_sql, options)
|
||||
execute(change_column_sql)
|
||||
end
|
||||
|
||||
def myisam_table
|
||||
return { :id => false, :force => true, :options => "ENGINE=MyIsam" }
|
||||
end
|
||||
|
||||
def innodb_table
|
||||
return { :id => false, :force => true, :options => "ENGINE=InnoDB" }
|
||||
end
|
||||
|
||||
def innodb_option
|
||||
return "ENGINE=InnoDB"
|
||||
end
|
||||
|
||||
def change_engine (table_name, engine)
|
||||
execute "ALTER TABLE #{table_name} ENGINE = #{engine}"
|
||||
end
|
||||
|
||||
def add_fulltext_index (table_name, column)
|
||||
execute "CREATE FULLTEXT INDEX `#{table_name}_#{column}_idx` ON `#{table_name}` (`#{column}`)"
|
||||
end
|
||||
|
||||
def enumerations
|
||||
@enumerations ||= Hash.new
|
||||
end
|
||||
|
||||
def create_enumeration (enumeration_name, values)
|
||||
enumerations[enumeration_name] = values
|
||||
end
|
||||
|
||||
def drop_enumeration (enumeration_name)
|
||||
enumerations.delete(enumeration_name)
|
||||
end
|
||||
|
||||
def alter_primary_key(table_name, new_columns)
|
||||
execute("alter table #{table_name} drop primary key, add primary key (#{new_columns.join(',')})")
|
||||
end
|
||||
|
||||
def interval_constant(interval)
|
||||
"'#{interval}'"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
||||
class PostgreSQLAdapter
|
||||
alias_method :old_native_database_types, :native_database_types
|
||||
|
||||
|
@ -208,5 +127,4 @@ module ActiveRecord
|
|||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue