Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
Dapper
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tsai
Dapper
Commits
0bba6966
Commit
0bba6966
authored
May 20, 2011
by
mgravell
Browse files
Options
Browse Files
Download
Plain Diff
Automated merge with
https://dapper-dot-net.googlecode.com/hg/
parents
df9fe51e
6b092ad8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
84 additions
and
2 deletions
+84
-2
SqlMapper.cs
Dapper/SqlMapper.cs
+39
-2
Tests.cs
Tests/Tests.cs
+45
-0
No files found.
Dapper/SqlMapper.cs
View file @
0bba6966
...
...
@@ -692,6 +692,15 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
foreach
(
var
prop
in
type
.
GetProperties
().
OrderBy
(
p
=>
p
.
Name
))
{
if
(
prop
.
PropertyType
==
typeof
(
DbString
))
{
il
.
Emit
(
OpCodes
.
Ldloc_0
);
// stack is now [parameters] [typed-param]
il
.
Emit
(
OpCodes
.
Callvirt
,
prop
.
GetGetMethod
());
// stack is [parameters] [dbstring]
il
.
Emit
(
OpCodes
.
Ldarg_0
);
// stack is now [parameters] [dbstring] [command]
il
.
Emit
(
OpCodes
.
Ldstr
,
"@"
+
prop
.
Name
);
// stack is now [parameters] [dbstring] [command] [name]
il
.
EmitCall
(
OpCodes
.
Callvirt
,
typeof
(
DbString
).
GetMethod
(
"AddParameter"
),
null
);
// stack is now [parameters]
continue
;
}
DbType
dbType
=
LookupDbType
(
prop
.
PropertyType
);
if
(
dbType
==
DbType
.
Xml
)
{
...
...
@@ -1109,12 +1118,12 @@ void SqlMapper.IDynamicParameters.AddParameter(IDbCommand command)
var
p
=
command
.
CreateParameter
();
var
val
=
param
.
Value
;
p
.
ParameterName
=
param
.
Name
;
p
.
Value
=
val
;
p
.
Value
=
val
??
DBNull
.
Value
;
p
.
Direction
=
param
.
ParameterDirection
;
var
s
=
val
as
string
;
if
(
s
!=
null
)
{
if
(
s
.
Length
<
4000
)
if
(
s
.
Length
<
=
4000
)
{
p
.
Size
=
4000
;
}
...
...
@@ -1137,4 +1146,32 @@ public T Get<T>(string name)
return
(
T
)
parameters
[
name
].
AttachedParam
.
Value
;
}
}
public
sealed
class
DbString
{
public
DbString
()
{
Length
=
-
1
;
}
public
bool
IsAnsi
{
get
;
set
;
}
public
bool
IsFixedLength
{
get
;
set
;
}
public
int
Length
{
get
;
set
;
}
public
string
Value
{
get
;
set
;
}
public
void
AddParameter
(
IDbCommand
command
,
string
name
)
{
if
(
IsFixedLength
&&
Length
==
-
1
)
{
throw
new
InvalidOperationException
(
"If specifying IsFixedLength, a Length must also be specified"
);
}
var
param
=
command
.
CreateParameter
();
param
.
ParameterName
=
name
;
param
.
Value
=
(
object
)
Value
??
DBNull
.
Value
;
if
(
Length
==
-
1
&&
Value
!=
null
&&
Value
.
Length
<=
4000
)
{
param
.
Size
=
4000
;
}
else
{
param
.
Size
=
Length
;
}
param
.
DbType
=
IsAnsi
?
(
IsFixedLength
?
DbType
.
AnsiStringFixedLength
:
DbType
.
AnsiString
)
:
(
IsFixedLength
?
DbType
.
StringFixedLength
:
DbType
.
String
);
command
.
Parameters
.
Add
(
param
);
}
}
}
Tests/Tests.cs
View file @
0bba6966
...
...
@@ -337,6 +337,31 @@ public void TestMultiMapDynamic()
connection
.
Execute
(
"drop table #Users drop table #Posts"
);
}
class
Product
{
public
int
Id
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
public
Category
Category
{
get
;
set
;
}
}
class
Category
{
public
int
Id
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
}
public
void
TestMultiMapWithSplit
()
// http://stackoverflow.com/q/6056778/23354
{
var
sql
=
@"select 1 as id, 'abc' as name, 2 as id, 'def' as name"
;
var
product
=
connection
.
Query
<
Product
,
Category
,
Product
>(
sql
,
(
prod
,
cat
)
=>
{
prod
.
Category
=
cat
;
return
prod
;
}).
First
();
// assertions
product
.
Id
.
IsEqualTo
(
1
);
product
.
Name
.
IsEqualTo
(
"abc"
);
product
.
Category
.
Id
.
IsEqualTo
(
2
);
product
.
Category
.
Name
.
IsEqualTo
(
"def"
);
}
public
void
TestFieldsAndPrivates
()
{
var
data
=
connection
.
Query
<
TestFieldCaseAndPrivatesEntity
>(
...
...
@@ -544,6 +569,26 @@ select 1111
}
public
void
TestDbString
()
{
var
obj
=
connection
.
Query
(
"select datalength(@a) as a, datalength(@b) as b, datalength(@c) as c, datalength(@d) as d, datalength(@e) as e, datalength(@f) as f"
,
new
{
a
=
new
DbString
{
Value
=
"abcde"
,
IsFixedLength
=
true
,
Length
=
10
,
IsAnsi
=
true
},
b
=
new
DbString
{
Value
=
"abcde"
,
IsFixedLength
=
true
,
Length
=
10
,
IsAnsi
=
false
},
c
=
new
DbString
{
Value
=
"abcde"
,
IsFixedLength
=
false
,
Length
=
10
,
IsAnsi
=
true
},
d
=
new
DbString
{
Value
=
"abcde"
,
IsFixedLength
=
false
,
Length
=
10
,
IsAnsi
=
false
},
e
=
new
DbString
{
Value
=
"abcde"
,
IsAnsi
=
true
},
f
=
new
DbString
{
Value
=
"abcde"
,
IsAnsi
=
false
},
}).
First
();
((
int
)
obj
.
a
).
IsEqualTo
(
10
);
((
int
)
obj
.
b
).
IsEqualTo
(
20
);
((
int
)
obj
.
c
).
IsEqualTo
(
5
);
((
int
)
obj
.
d
).
IsEqualTo
(
10
);
((
int
)
obj
.
e
).
IsEqualTo
(
5
);
((
int
)
obj
.
f
).
IsEqualTo
(
10
);
}
class
Person
{
public
int
PersonId
{
get
;
set
;
}
...
...
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