Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
fe685c62
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
fe685c62
编写于
4月 18, 2016
作者:
J
Jeremy Daer
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #23622 from kamipo/primary_key_should_be_not_null
Primary key should be `NOT NULL`
上级
983b743c
98fb3744
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
28 addition
and
4 deletion
+28
-4
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+17
-0
activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb
...tive_record/connection_adapters/abstract/schema_dumper.rb
+1
-1
activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb
.../active_record/connection_adapters/mysql/schema_dumper.rb
+1
-1
activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb
...ve_record/connection_adapters/postgresql/schema_dumper.rb
+1
-1
activerecord/lib/active_record/connection_adapters/sqlite3/schema_creation.rb
...ive_record/connection_adapters/sqlite3/schema_creation.rb
+7
-0
activerecord/test/cases/primary_keys_test.rb
activerecord/test/cases/primary_keys_test.rb
+1
-1
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
fe685c62
*
SQLite: Force NOT NULL primary keys.
From SQLite docs: https://www.sqlite.org/lang_createtable.html
According to the SQL standard, PRIMARY KEY should always imply NOT
NULL. Unfortunately, due to a bug in some early versions, this is not
the case in SQLite. Unless the column is an INTEGER PRIMARY KEY or the
table is a WITHOUT ROWID table or the column is declared NOT NULL,
SQLite allows NULL values in a PRIMARY KEY column. SQLite could be
fixed to conform to the standard, but doing so might break legacy
applications. Hence, it has been decided to merely document the fact
that SQLite allowing NULLs in most PRIMARY KEY columns.
Now we override column options to explicitly set NOT NULL rather than rely
on implicit NOT NULL like MySQL and PostgreSQL adapters.
*Ryuta Kamizono*
*
Added notice when a database is successfully created or dropped.
Example:
...
...
activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb
浏览文件 @
fe685c62
...
...
@@ -16,7 +16,7 @@ def column_spec(column)
def
column_spec_for_primary_key
(
column
)
return
{}
if
default_primary_key?
(
column
)
spec
=
{
id:
schema_type
(
column
).
inspect
}
spec
.
merge!
(
prepare_column_options
(
column
))
spec
.
merge!
(
prepare_column_options
(
column
)
.
except!
(
:null
)
)
end
# This can be overridden on an Adapter level basis to support other
...
...
activerecord/lib/active_record/connection_adapters/mysql/schema_dumper.rb
浏览文件 @
fe685c62
...
...
@@ -7,7 +7,7 @@ def column_spec_for_primary_key(column)
spec
=
{
id: :bigint
.
inspect
}
spec
[
:default
]
=
schema_default
(
column
)
||
'nil'
unless
column
.
auto_increment?
else
spec
=
super
.
except!
(
:null
)
spec
=
super
end
spec
[
:unsigned
]
=
'true'
if
column
.
unsigned?
spec
...
...
activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb
浏览文件 @
fe685c62
...
...
@@ -3,7 +3,7 @@ module ConnectionAdapters
module
PostgreSQL
module
ColumnDumper
def
column_spec_for_primary_key
(
column
)
spec
=
super
.
except!
(
:null
)
spec
=
super
if
schema_type
(
column
)
==
:uuid
spec
[
:default
]
||=
'nil'
end
...
...
activerecord/lib/active_record/connection_adapters/sqlite3/schema_creation.rb
浏览文件 @
fe685c62
...
...
@@ -3,6 +3,13 @@ module ConnectionAdapters
module
SQLite3
class
SchemaCreation
<
AbstractAdapter
::
SchemaCreation
private
def
column_options
(
o
)
options
=
super
options
[
:null
]
=
false
if
o
.
primary_key
options
end
def
add_column_options!
(
sql
,
options
)
if
options
[
:collation
]
sql
<<
" COLLATE
\"
#{
options
[
:collation
]
}
\"
"
...
...
activerecord/test/cases/primary_keys_test.rb
浏览文件 @
fe685c62
...
...
@@ -229,7 +229,7 @@ def test_any_type_primary_key
assert_equal
"code"
,
Barcode
.
primary_key
column
=
Barcode
.
column_for_attribute
(
Barcode
.
primary_key
)
assert_not
column
.
null
unless
current_adapter?
(
:SQLite3Adapter
)
assert_not
column
.
null
assert_equal
:string
,
column
.
type
assert_equal
42
,
column
.
limit
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录