Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
O
OHR Support
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
97
Issues
97
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
OHR Support
Commits
6a55e9e7
Commit
6a55e9e7
authored
May 19, 2011
by
Felix Schäfer
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request
#57
from meineerde/issues/unstable/112-database-detection-library
Database detection library.
#112
parents
0957e478
7b3a2047
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
130 additions
and
2 deletions
+130
-2
user.rb
app/models/user.rb
+1
-1
20091227112908_change_wiki_contents_text_limit.rb
db/migrate/20091227112908_change_wiki_contents_text_limit.rb
+1
-1
database.rb
lib/chili_project/database.rb
+78
-0
database_test.rb
test/unit/lib/chili_project/database_test.rb
+50
-0
No files found.
app/models/user.rb
View file @
6a55e9e7
...
...
@@ -299,7 +299,7 @@ class User < Principal
# version. Exact matches will be given priority.
def
self
.
find_by_login
(
login
)
# force string comparison to be case sensitive on MySQL
type_cast
=
(
ActiveRecord
::
Base
.
connection
.
adapter_name
=~
/mysql/i
)
?
'BINARY'
:
''
type_cast
=
(
ChiliProject
::
Database
.
mysql?
)
?
'BINARY'
:
''
# First look for an exact match
user
=
first
(
:conditions
=>
[
"
#{
type_cast
}
login = ?"
,
login
])
# Fail over to case-insensitive if none was found
...
...
db/migrate/20091227112908_change_wiki_contents_text_limit.rb
View file @
6a55e9e7
...
...
@@ -3,7 +3,7 @@ class ChangeWikiContentsTextLimit < ActiveRecord::Migration
# Migrates MySQL databases only
# Postgres would raise an error (see http://dev.rubyonrails.org/ticket/3818)
# Not fixed in Rails 2.3.5
if
ActiveRecord
::
Base
.
connection
.
adapter_name
=~
/mysql/i
if
ChiliProject
::
Database
.
mysql?
max_size
=
16
.
megabytes
change_column
:wiki_contents
,
:text
,
:text
,
:limit
=>
max_size
change_column
:wiki_content_versions
,
:data
,
:binary
,
:limit
=>
max_size
...
...
lib/chili_project/database.rb
0 → 100644
View file @
6a55e9e7
# ChiliProject is a project management system.
# Copyright (C) 2010-2011 The ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module
ChiliProject
# This module provides some information about the currently used database
# adapter. It can be used to write code specific to certain database
# vendors which, while not not encouraged, is sometimes necessary due to
# syntax differences.
module
Database
# This method returns a hash which maps the identifier of the supported
# adapter to a regex matching the adapter_name.
def
self
.
supported_adapters
@adapters
||=
({
:mysql
=>
/mysql/i
,
:postgresql
=>
/postgres/i
,
:sqlite
=>
/sqlite/i
})
end
# Get the raw namme of the currently used database adapter.
# This string is set by the used adapter gem.
def
self
.
adapter_name
ActiveRecord
::
Base
.
connection
.
adapter_name
end
# returns the identifier of the currently used database type
def
self
.
name
supported_adapters
.
find
(
proc
{
[
:unknown
,
//
]
})
{
|
adapter
,
regex
|
self
.
adapter_name
=~
regex
}[
0
]
end
# Provide helper methods to quickly check the database type
# ChiliProject::Database.mysql? returns true, if we have a MySQL DB
supported_adapters
.
keys
.
each
do
|
adapter
|
(
class
<<
self
;
self
;
end
).
class_eval
do
define_method
(
:"
#{
adapter
.
to_s
}
?"
){
send
(
:name
)
==
adapter
}
end
end
# Return the version of the underlying database engine.
# Set the +raw+ argument to true to return the unmangled string
# from the database.
def
self
.
version
(
raw
=
false
)
case
self
.
name
when
:mysql
version
=
ActiveRecord
::
Base
.
connection
.
select_value
(
'SELECT VERSION()'
)
when
:postgresql
version
=
ActiveRecord
::
Base
.
connection
.
select_value
(
'SELECT version()'
)
raw
?
version
:
version
.
match
(
/^PostgreSQL (\S+)/i
)[
1
]
when
:sqlite
if
SQLite3
.
const_defined?
'SQLITE_VERSION'
SQLite3
::
SQLITE_VERSION
else
SQLite3
::
Driver
::
Native
::
API
.
sqlite3_libversion
end
end
end
end
end
\ No newline at end of file
test/unit/lib/chili_project/database_test.rb
0 → 100644
View file @
6a55e9e7
# ChiliProject is a project management system.
# Copyright (C) 2010-2011 The ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require
File
.
expand_path
(
'../../../../test_helper'
,
__FILE__
)
class
ChiliProject
::
DatabaseTest
<
ActiveSupport
::
TestCase
setup
do
ChiliProject
::
Database
.
stubs
(
:adapter_name
).
returns
"SQLite"
SQLite3
::
Driver
::
Native
::
API
.
stubs
(
:sqlite3_libversion
).
returns
"3.6.12"
end
should
"return the correct identifier"
do
assert_equal
:sqlite
,
ChiliProject
::
Database
.
name
end
should
"be able to use the helper methods"
do
assert_equal
false
,
ChiliProject
::
Database
.
mysql?
assert_equal
false
,
ChiliProject
::
Database
.
postgresql?
assert_equal
true
,
ChiliProject
::
Database
.
sqlite?
end
should
"return a version string"
do
assert_equal
"3.6.12"
,
ChiliProject
::
Database
.
version
end
should
"return long version string for raw==true"
do
ChiliProject
::
Database
.
stubs
(
:adapter_name
).
returns
"PostgreSQL"
raw_version
=
"PostgreSQL 8.3.11 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2"
ActiveRecord
::
Base
.
connection
.
stubs
(
:select_value
).
returns
raw_version
assert_equal
"8.3.11"
,
ChiliProject
::
Database
.
version
assert_equal
raw_version
,
ChiliProject
::
Database
.
version
(
true
)
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment