Commit Graph

29 Commits

Author SHA1 Message Date
Paul Yang
601f6963eb
Lazily Create Singular Wrapper Message (#6833)
* Register additional handlers from wrappers

* Return zval instead of parse frame

* Use parse frame

* Update upb

* Lazily create wrapper messages

* Fix a segment fault

Need check type of field before getting submsg def

* Avoid expanding during serialization and direct access

* Fix a bug that getXXXUnwrapped returns null for string

* Implement writeWrapperUnwrapped

* Add more tests

* Fix oneof wrapper parsing

* Fix get oneof field

* Avoid expansion for oneof wrappers

* Fix bug

* Fix a bug that in php7 variable is defined out of scope

* Fix broken tests
 * Update upb to fix Timestamp conformance tests
 * Fix segmentation fault for oneof wrapper fields

* Fix encoding/decoding top level wrapper values

* Add type checking for write wrapper value in php7

* Fix zts build

* Fix the bug that readWrapperValue uses parent message's layout to access wrapper value

* Fix wrapper in map
2019-11-14 12:17:04 -08:00
Paul Yang
a32c2d0306
Initialize well known type values (#6713)
* Initialize well known type values

Also fixes #6667

* Revert unwanted change
2019-09-30 14:43:03 -07:00
Paul Yang
8faa778add
Fix Any json encoding/decoding in php (#5496)
* Fix Any json encoding/decoding in php

* Fix comments
2018-12-26 10:36:09 -08:00
Leonard Hecker
e7746f487c php: Added nanosecond support for Timestamp (#3972)
* php: Added nanosecond support for Timestamp

* php: Fixed compatibility test
2018-07-20 13:03:00 -07:00
Paul Yang
7d1a8fff1b
Fix php memory leak test (#4692) 2018-05-29 10:25:05 -07:00
Brent Shaffer
6737954661 PHP namespaces for nested messages and enums (#4536)
* uses namespaces for nested messages and enums

* fixes namespaces for PHP dist

* fixes namespace for Descriptors, adds Cardinality and Kind

* fixes nested namespaces for reserved words and adds tests

* adds tests and generator fix for php class prefixes

* fixes escaping of protobuf packages, enum comments, misc others

* nice refactor of generated code

* adds class files for backwards compatibility

* simplifies code with templates

* adds compatibility files to makefile

* cleanup of generator and fixes nested namespace bug

* regenerates proto types

* remove internal BC classes

* adds deprecated warning, adds methods back

* simplifies if statement

* fixes dist files

* addresses review comments

* adds back TYPE_URL_PREFIX constant

* adds @deprecated to old nested class files

* skips tests which require a separate process when protobuf.so is enabled

* Adds tests for legacy nested classes that do not require separate processes to test

* uses legacy names for GPBUtil message check

* adds block for IDE @deprecated message

* Namespace for nested message/enum in c extension

* Remove unused code
2018-05-24 13:39:41 -07:00
Paul Yang
51293f36d8
Fix more memory leak for php c extension (#4211)
* Fix more memory leak for php c extension

* Fix memory leak for php5.5
2018-01-25 11:31:05 -08:00
Bo Yang
fffe8d39f8 Call php method via function name instead of calling directly.
This changes the linking error if php extension is not statically linked
to a runtime error. In this way, users who don't need Timestamp can
still use protobuf even if date extension is not statically linked in
php.
2017-12-12 17:47:04 -08:00
Bo Yang
88102eae8f Replace private timelib_update_ts with public date_timestamp_get 2017-12-12 13:57:49 -08:00
Bo Yang
212563d756 Fix memory leak in php7 2017-12-06 10:40:07 -08:00
Bo Yang
3b7a5f4515 Fix several more memory leak 2017-12-06 10:38:18 -08:00
Bo Yang
7d3437152a Fix memory leak when creating map field via array. 2017-12-06 10:37:53 -08:00
Bo Yang
e0d3aa057b Fix memory leak when creating repeated field via array. 2017-12-06 10:37:26 -08:00
Paul Yang
6032746882 Reserve unknown fields in php (#3659)
* Reserve unknown fields in upb
1) For decoding, an unknownfields will be lazily created on message,
which contains bytes of unknown fields.
2) For encoding, if the unknownfields is present on message, all bytes
contained in it will be serialized.

* Register the function to encode unknown field at decode time.

* Remove upb_handlers_setaddunknown

* Use upb_sink_putunknown in decoder

* Remove upb_pb_encoder_encode_unknown

* Do not expose encode_unknown

* Implement reserve unknown field in php Implement.

* Make buffer private to CodedInputStream
2017-10-09 12:39:13 -07:00
Bo Yang
dd5190980b Use message name as defined in php runtime. 2017-08-21 13:39:15 -07:00
Paul Yang
49b44bff2b Fix the bug in php c extension that setting one field can change another field's value. (#3455)
* Fix the bug in php c extension that setting one field can change another
field's value.

The reason is that previously, in c extension, it was assumed that the
order that fields were declared in php is the same as the order of
fields in upb. This is not true. Now, for every field in upb, we will
look up the actual property that is corresponding to the upb field.

* Cleanup pull request

* Fix indentation

* Port to php5

* Port with php7.1

* Port to zts
2017-08-04 16:35:49 -07:00
Paul Yang
c78dbd7c89 Initial value in generated code cannot be used by c extension. (#3367)
In the generated code of previous versions, each php field is given an
initial value. In c extension, it was assumed that the field order in
the generated code is consistent with upb fields order, so that the
correct initial value can be bound to the correct upb field. However,
this may not be true. The order of fields in generated code is decided
by proto compiler, while the order of upb fields is decided by the hash
function used in c extension.
This PR fixes the issue by reset the initial value at runtime.
2017-07-14 15:48:48 -06:00
Paul Yang
ecca6ea95d Add json encode/decode for php. (#3226)
* Add json encode/decode for php.

* Fix php conformance test on 32-bit machines.

* Fix conformance test for c extension.

* Fix comments
2017-06-30 12:14:09 -07:00
Paul Yang
6f325805c0 Add new file option php_namespace. (#3162)
* Add new file option php_namespace.

Use this option to change the namespace of php generated classes.
Default is empty. When this option is empty, the package name will be
used for determining the namespace.

* Uncomment commented tests

* Revert gdb test change

* Update csharp descriptor.

* Add test for empty php_namespace.
2017-06-05 00:10:18 -07:00
Paul Yang
282fb9e68e Add ARRAY for reserved name (#3150) 2017-05-29 15:30:47 -07:00
Paul Yang
4c57e8475f Prepend "PB" to generated classes whose name are reserved words. (#2990) 2017-04-20 01:19:03 -07:00
Paul Yang
b97cd573e4 Add test for nested enum for php (#2989) 2017-04-19 21:20:55 -07:00
Paul Yang
7be088202b Enum defined without package have incorrect class name. (#2988)
Fix the bug by sharing the code for generating class name for both
message and enum.
2017-04-19 20:03:34 -07:00
Paul Yang
190b5270c8 Make PHP c extension work with PHP7 (#2951) 2017-04-19 16:23:51 -07:00
Paul Yang
6b27c1f981 Add file option php_class_prefix (#2849)
This option will be prepended to generated classes of all messages in
the containing file.
2017-03-17 11:08:06 -07:00
Paul Yang
dd8d5f57d7 Rename encode/decode to serializeToString/mergeFromString (#2795)
This better shows the semantic of the API. For already setted fields,
mergeFromString do replacement for singular fields and appending for
repeated fields.
2017-03-08 14:31:34 -08:00
Paul Yang
bcbaabe53a Add mergeFrom method on Message (#2766)
This method merges the contents of the specified message into the
current message. Singular fields that are set in the specified message
overwrite the corresponding fields in the current message.  Repeated
fields are appended. Map fields key-value pairs are overritten.
Singular/Oneof sub-messages are recursively merged. All overritten
sub-messages are deep-copied.
2017-03-01 10:39:48 -08:00
Paul Yang
46ae90dc5e Make php generated code conform to PSR-4. (#2435)
1. Generate single file for each message.
2. Lazily initiate metadata.
2016-12-08 11:16:49 -08:00
Paul Yang
e0e54661f7 Check in php implementation. (#2052)
This pull request includes two implementation: C extension and PHP
package. Both implementations support encode/decode of singular,
repeated and map fields.
2016-09-15 11:09:01 -07:00