PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 131
// Copyright (C) MongoDB, Inc. 2017-present. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 package mongo import ( "errors" "fmt" "testing" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/bsoncodec" "go.mongodb.org/mongo-driver/bson/bsontype" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/internal/assert" "go.mongodb.org/mongo-driver/internal/codecutil" "go.mongodb.org/mongo-driver/internal/require" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/x/bsonx/bsoncore" ) func TestEnsureID(t *testing.T) { t.Parallel() oid := primitive.NewObjectID() testCases := []struct { description string // TODO: Registry? DecodeOptions? doc bsoncore.Document oid primitive.ObjectID want bsoncore.Document wantID interface{} }{ { description: "missing _id should be first element", doc: bsoncore.NewDocumentBuilder(). AppendString("foo", "bar"). AppendString("baz", "quix"). AppendString("hello", "world"). Build(), want: bsoncore.NewDocumentBuilder(). AppendObjectID("_id", oid). AppendString("foo", "bar"). AppendString("baz", "quix"). AppendString("hello", "world"). Build(), wantID: oid, }, { description: "existing ObjectID _id as should remain in place", doc: bsoncore.NewDocumentBuilder(). AppendString("foo", "bar"). AppendObjectID("_id", oid). AppendString("baz", "quix"). AppendString("hello", "world"). Build(), want: bsoncore.NewDocumentBuilder(). AppendString("foo", "bar"). AppendObjectID("_id", oid). AppendString("baz", "quix"). AppendString("hello", "world"). Build(), wantID: oid, }, { description: "existing float _id as should remain in place", doc: bsoncore.NewDocumentBuilder(). AppendString("foo", "bar"). AppendDouble("_id", 3.14159). AppendString("baz", "quix"). AppendString("hello", "world"). Build(), want: bsoncore.NewDocumentBuilder(). AppendString("foo", "bar"). AppendDouble("_id", 3.14159). AppendString("baz", "quix"). AppendString("hello", "world"). Build(), wantID: 3.14159, }, { description: "existing float _id as first element should remain first element", doc: bsoncore.NewDocumentBuilder(). AppendDouble("_id", 3.14159). AppendString("foo", "bar"). AppendString("baz", "quix"). AppendString("hello", "world"). Build(), want: bsoncore.NewDocumentBuilder(). AppendDouble("_id", 3.14159). AppendString("foo", "bar"). AppendString("baz", "quix"). AppendString("hello", "world"). Build(), wantID: 3.14159, }, { description: "existing binary _id as first field should not be overwritten", doc: bsoncore.NewDocumentBuilder(). AppendBinary("bin", 0, []byte{0, 0, 0}). AppendString("_id", "LongEnoughIdentifier"). Build(), want: bsoncore.NewDocumentBuilder(). AppendBinary("bin", 0, []byte{0, 0, 0}). AppendString("_id", "LongEnoughIdentifier"). Build(), wantID: "LongEnoughIdentifier", }, } for _, tc := range testCases { tc := tc // Capture range variable. t.Run(tc.description, func(t *testing.T) { t.Parallel() got, gotID, err := ensureID(tc.doc, oid, nil, nil) require.NoError(t, err, "ensureID error") assert.Equal(t, tc.want, got, "expected and actual documents are different") assert.Equal(t, tc.wantID, gotID, "expected and actual IDs are different") // Ensure that if the unmarshaled "_id" value is a // primitive.ObjectID that it is a deep copy and does not share any // memory with the document byte slice. if oid, ok := gotID.(primitive.ObjectID); ok { assert.DifferentAddressRanges(t, tc.doc, oid[:]) } }) } } func TestMarshalAggregatePipeline(t *testing.T) { // []byte of [{{"$limit", 12345}}] index, arr := bsoncore.AppendArrayStart(nil) dindex, arr := bsoncore.AppendDocumentElementStart(arr, "0") arr = bsoncore.AppendInt32Element(arr, "$limit", 12345) arr, _ = bsoncore.AppendDocumentEnd(arr, dindex) arr, _ = bsoncore.AppendArrayEnd(arr, index) // []byte of {{"x", 1}} index, doc := bsoncore.AppendDocumentStart(nil) doc = bsoncore.AppendInt32Element(doc, "x", 1) doc, _ = bsoncore.AppendDocumentEnd(doc, index) // bsoncore.Array of [{{"$merge", {}}}] mergeStage := bsoncore.NewDocumentBuilder(). StartDocument("$merge"). FinishDocument(). Build() arrMergeStage := bsoncore.NewArrayBuilder().AppendDocument(mergeStage).Build() fooStage := bsoncore.NewDocumentBuilder().AppendString("foo", "bar").Build() bazStage := bsoncore.NewDocumentBuilder().AppendString("baz", "qux").Build() outStage := bsoncore.NewDocumentBuilder().AppendString("$out", "myColl").Build() // bsoncore.Array of [{{"foo", "bar"}}, {{"baz", "qux"}}, {{"$out", "myColl"}}] arrOutStage := bsoncore.NewArrayBuilder(). AppendDocument(fooStage). AppendDocument(bazStage). AppendDocument(outStage). Build() // bsoncore.Array of [{{"foo", "bar"}}, {{"$out", "myColl"}}, {{"baz", "qux"}}] arrMiddleOutStage := bsoncore.NewArrayBuilder(). AppendDocument(fooStage). AppendDocument(outStage). AppendDocument(bazStage). Build() testCases := []struct { name string pipeline interface{} arr bson.A hasOutputStage bool err error }{ { "Pipeline/error", Pipeline{{{"hello", func() {}}}}, nil, false, MarshalError{Value: primitive.D{}, Err: errors.New("no encoder found for func()")}, }, { "Pipeline/success", Pipeline{{{"hello", "world"}}, {{"pi", 3.14159}}}, bson.A{ bson.D{{"hello", "world"}}, bson.D{{"pi", 3.14159}}, }, false, nil, }, { "bson.A", bson.A{ bson.D{{"$limit", 12345}}, }, bson.A{ bson.D{{"$limit", 12345}}, }, false, nil, }, { "[]bson.D", []bson.D{{{"$limit", 12345}}}, bson.A{ bson.D{{"$limit", 12345}}, }, false, nil, }, { "primitive.A/error", primitive.A{"5"}, nil, false, MarshalError{Value: "", Err: errors.New("WriteString can only write while positioned on a Element or Value but is positioned on a TopLevel")}, }, { "primitive.A/success", primitive.A{bson.D{{"$limit", int32(12345)}}, map[string]interface{}{"$count": "foobar"}}, bson.A{ bson.D{{"$limit", int(12345)}}, bson.D{{"$count", "foobar"}}, }, false, nil, }, { "bson.A/error", bson.A{"5"}, nil, false, MarshalError{Value: "", Err: errors.New("WriteString can only write while positioned on a Element or Value but is positioned on a TopLevel")}, }, { "bson.A/success", bson.A{bson.D{{"$limit", int32(12345)}}, map[string]interface{}{"$count": "foobar"}}, bson.A{ bson.D{{"$limit", int32(12345)}}, bson.D{{"$count", "foobar"}}, }, false, nil, }, { "[]interface{}/error", []interface{}{"5"}, nil, false, MarshalError{Value: "", Err: errors.New("WriteString can only write while positioned on a Element or Value but is positioned on a TopLevel")}, }, { "[]interface{}/success", []interface{}{bson.D{{"$limit", int32(12345)}}, map[string]interface{}{"$count": "foobar"}}, bson.A{ bson.D{{"$limit", int32(12345)}}, bson.D{{"$count", "foobar"}}, }, false, nil, }, { "bsoncodec.ValueMarshaler/MarshalBSONValue error", bvMarsh{err: errors.New("MarshalBSONValue error")}, nil, false, errors.New("MarshalBSONValue error"), }, { "bsoncodec.ValueMarshaler/not array", bvMarsh{t: bsontype.String}, nil, false, fmt.Errorf("ValueMarshaler returned a %v, but was expecting %v", bsontype.String, bsontype.Array), }, { "bsoncodec.ValueMarshaler/UnmarshalBSONValue error", bvMarsh{err: errors.New("UnmarshalBSONValue error")}, nil, false, errors.New("UnmarshalBSONValue error"), }, { "bsoncodec.ValueMarshaler/success", bvMarsh{t: bsontype.Array, data: arr}, bson.A{ bson.D{{"$limit", int32(12345)}}, }, false, nil, }, { "bsoncodec.ValueMarshaler/success nil", bvMarsh{t: bsontype.Array}, nil, false, nil, }, { "nil", nil, nil, false, errors.New("can only marshal slices and arrays into aggregation pipelines, but got invalid"), }, { "not array or slice", int64(42), nil, false, errors.New("can only marshal slices and arrays into aggregation pipelines, but got int64"), }, { "array/error", [1]interface{}{int64(42)}, nil, false, MarshalError{Value: int64(0), Err: errors.New("WriteInt64 can only write while positioned on a Element or Value but is positioned on a TopLevel")}, }, { "array/success", [1]interface{}{primitive.D{{"$limit", int64(12345)}}}, bson.A{ bson.D{{"$limit", int64(12345)}}, }, false, nil, }, { "slice/error", []interface{}{int64(42)}, nil, false, MarshalError{Value: int64(0), Err: errors.New("WriteInt64 can only write while positioned on a Element or Value but is positioned on a TopLevel")}, }, { "slice/success", []interface{}{primitive.D{{"$limit", int64(12345)}}}, bson.A{ bson.D{{"$limit", int64(12345)}}, }, false, nil, }, { "hasOutputStage/out", bson.A{ bson.D{{"$out", bson.D{ {"db", "output-db"}, {"coll", "output-collection"}, }}}, }, bson.A{ bson.D{{"$out", bson.D{ {"db", "output-db"}, {"coll", "output-collection"}, }}}, }, true, nil, }, { "hasOutputStage/merge", bson.A{ bson.D{{"$merge", bson.D{ {"into", bson.D{ {"db", "output-db"}, {"coll", "output-collection"}, }}, }}}, }, bson.A{ bson.D{{"$merge", bson.D{ {"into", bson.D{ {"db", "output-db"}, {"coll", "output-collection"}, }}, }}}, }, true, nil, }, { "semantic single document/bson.D", bson.D{{"x", 1}}, nil, false, errors.New("primitive.D is not an allowed pipeline type as it represents a single document. Use bson.A or mongo.Pipeline instead"), }, { "semantic single document/bson.Raw", bson.Raw(doc), nil, false, errors.New("bson.Raw is not an allowed pipeline type as it represents a single document. Use bson.A or mongo.Pipeline instead"), }, { "semantic single document/bsoncore.Document", bsoncore.Document(doc), nil, false, errors.New("bsoncore.Document is not an allowed pipeline type as it represents a single document. Use bson.A or mongo.Pipeline instead"), }, { "semantic single document/empty bson.D", bson.D{}, bson.A{}, false, nil, }, { "semantic single document/empty bson.Raw", bson.Raw{}, bson.A{}, false, nil, }, { "semantic single document/empty bsoncore.Document", bsoncore.Document{}, bson.A{}, false, nil, }, { "bsoncore.Array/success", bsoncore.Array(arr), bson.A{ bson.D{{"$limit", int32(12345)}}, }, false, nil, }, { "bsoncore.Array/mergeStage", arrMergeStage, bson.A{ bson.D{{"$merge", bson.D{}}}, }, true, nil, }, { "bsoncore.Array/outStage", arrOutStage, bson.A{ bson.D{{"foo", "bar"}}, bson.D{{"baz", "qux"}}, bson.D{{"$out", "myColl"}}, }, true, nil, }, { "bsoncore.Array/middleOutStage", arrMiddleOutStage, bson.A{ bson.D{{"foo", "bar"}}, bson.D{{"$out", "myColl"}}, bson.D{{"baz", "qux"}}, }, false, nil, }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { arr, hasOutputStage, err := marshalAggregatePipeline(tc.pipeline, nil, nil) assert.Equal(t, tc.hasOutputStage, hasOutputStage, "expected hasOutputStage %v, got %v", tc.hasOutputStage, hasOutputStage) if tc.err != nil { assert.NotNil(t, err) assert.EqualError(t, err, tc.err.Error()) } else { assert.Nil(t, err) } var expected bsoncore.Document if tc.arr != nil { _, expectedBSON, err := bson.MarshalValue(tc.arr) assert.Nil(t, err, "MarshalValue error: %v", err) expected = bsoncore.Document(expectedBSON) } assert.Equal(t, expected, arr, "expected array %v, got %v", expected, arr) }) } } func TestMarshalValue(t *testing.T) { t.Parallel() valueMarshaler := bvMarsh{ t: bson.TypeString, data: bsoncore.AppendString(nil, "foo"), } testCases := []struct { name string value interface{} bsonOpts *options.BSONOptions registry *bsoncodec.Registry want bsoncore.Value wantErr error }{ { name: "nil document", value: nil, wantErr: codecutil.ErrNilValue, }, { name: "value marshaler", value: valueMarshaler, want: bsoncore.Value{ Type: valueMarshaler.t, Data: valueMarshaler.data, }, }, { name: "document", value: bson.D{{Key: "x", Value: int64(1)}}, want: bsoncore.Value{ Type: bson.TypeEmbeddedDocument, Data: bsoncore.NewDocumentBuilder(). AppendInt64("x", 1). Build(), }, }, { name: "custom encode options", value: struct { Int int64 NilBytes []byte NilMap map[string]interface{} NilStrings []string ZeroStruct struct{ X int } `bson:"_,omitempty"` StringerMap map[*bson.RawValue]bool BSONField string `json:"jsonField"` }{ Int: 1, NilBytes: nil, NilMap: nil, NilStrings: nil, StringerMap: map[*bson.RawValue]bool{{}: true}, }, bsonOpts: &options.BSONOptions{ IntMinSize: true, NilByteSliceAsEmpty: true, NilMapAsEmpty: true, NilSliceAsEmpty: true, OmitZeroStruct: true, StringifyMapKeysWithFmt: true, UseJSONStructTags: true, }, want: bsoncore.Value{ Type: bson.TypeEmbeddedDocument, Data: bsoncore.NewDocumentBuilder(). AppendInt32("int", 1). AppendBinary("nilbytes", 0, []byte{}). AppendDocument("nilmap", bsoncore.NewDocumentBuilder().Build()). AppendArray("nilstrings", bsoncore.NewArrayBuilder().Build()). AppendDocument("stringermap", bsoncore.NewDocumentBuilder(). AppendBoolean("", true). Build()). AppendString("jsonField", ""). Build(), }, }, } for _, tc := range testCases { tc := tc // Capture range variable. t.Run(tc.name, func(t *testing.T) { t.Parallel() got, err := marshalValue(tc.value, tc.bsonOpts, tc.registry) assert.EqualBSON(t, tc.want, got) assert.Equal(t, tc.wantErr, err, "expected and actual error do not match") }) } } var _ bsoncodec.ValueMarshaler = bvMarsh{} type bvMarsh struct { t bsontype.Type data []byte err error } func (b bvMarsh) MarshalBSONValue() (bsontype.Type, []byte, error) { return b.t, b.data, b.err }