our
$VERSION
=
'v0.999.999.6'
;
Str
)
;
has
db_name
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> Str,
);
has
coll_name
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> Str,
);
has
full_name
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> Str,
);
has
document
=> (
is
=>
'ro'
,
required
=> 1,
);
has
_doc_id
=> (
is
=>
'ro'
,
init_arg
=>
undef
,
writer
=>
'_set_doc_id'
,
);
with
$_
for
qw(
MongoDB::Role::_PrivateConstructor
MongoDB::Role::_WriteOp
MongoDB::Role::_InsertPreEncoder
)
;
sub
execute {
my
(
$self
,
$link
) =
@_
;
my
(
$orig_doc
,
$insert_doc
) = (
$self
->document );
(
$insert_doc
=
$self
->_pre_encode_insert(
$link
,
$orig_doc
,
'.'
) ),
(
$self
->_set_doc_id(
$insert_doc
->{metadata}{_id} ) );
return
$link
->does_write_commands
? (
$self
->_send_write_command(
$link
,
[
insert
=>
$self
->coll_name,
documents
=> [
$insert_doc
],
writeConcern
=>
$self
->write_concern->as_struct,
],
$orig_doc
,
"MongoDB::InsertOneResult"
,
)->assert
)
: (
$self
->_send_legacy_op_with_gle(
$link
,
MongoDB::_Protocol::write_insert(
$self
->full_name,
$insert_doc
->{bson} ),
$orig_doc
,
"MongoDB::InsertOneResult"
)->assert
);
}
sub
_parse_cmd {
my
(
$self
,
$res
) =
@_
;
return
(
$res
->{ok} ? (
inserted_id
=>
$self
->_doc_id ) : () );
}
BEGIN {
no
warnings
'once'
;
*_parse_gle
= \
&_parse_cmd
;
}
1;