Skip to content

Commit 2a6dee5

Browse files
Use PHP's new class constant mechanism.
Let gen_stub.php define the constants for us, including deriving their actual values from C defines. As a side-effect we have to drop support for PHP < 7.2 as it does not have interned strings.
1 parent b580505 commit 2a6dee5

8 files changed

Lines changed: 1176 additions & 108 deletions

File tree

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ jobs:
77
strategy:
88
fail-fast: false
99
matrix:
10-
php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
10+
php: ['7.2', '7.3', '7.4', '8.0', '8.1']
1111
experimental: [false]
1212
include:
1313
- php: '8.2'
@@ -85,7 +85,7 @@ jobs:
8585
strategy:
8686
fail-fast: false
8787
matrix:
88-
php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
88+
php: ['7.2', '7.3', '7.4', '8.0', '8.1']
8989
experimental: [false]
9090
include:
9191
- php: '8.2'

redis.c

Lines changed: 0 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -290,104 +290,6 @@ PHP_REDIS_API RedisSock *redis_sock_get_connected(INTERNAL_FUNCTION_PARAMETERS)
290290
return redis_sock;
291291
}
292292

293-
/* Redis and RedisCluster objects share serialization/prefixing settings so
294-
* this is a generic function to add class constants to either */
295-
static void add_class_constants(zend_class_entry *ce, int is_cluster) {
296-
zend_declare_class_constant_long(ce, ZEND_STRL("REDIS_NOT_FOUND"), REDIS_NOT_FOUND);
297-
zend_declare_class_constant_long(ce, ZEND_STRL("REDIS_STRING"), REDIS_STRING);
298-
zend_declare_class_constant_long(ce, ZEND_STRL("REDIS_SET"), REDIS_SET);
299-
zend_declare_class_constant_long(ce, ZEND_STRL("REDIS_LIST"), REDIS_LIST);
300-
zend_declare_class_constant_long(ce, ZEND_STRL("REDIS_ZSET"), REDIS_ZSET);
301-
zend_declare_class_constant_long(ce, ZEND_STRL("REDIS_HASH"), REDIS_HASH);
302-
zend_declare_class_constant_long(ce, ZEND_STRL("REDIS_STREAM"), REDIS_STREAM);
303-
304-
/* Add common mode constants */
305-
zend_declare_class_constant_long(ce, ZEND_STRL("ATOMIC"), ATOMIC);
306-
zend_declare_class_constant_long(ce, ZEND_STRL("MULTI"), MULTI);
307-
308-
/* options */
309-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_SERIALIZER"), REDIS_OPT_SERIALIZER);
310-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_PREFIX"), REDIS_OPT_PREFIX);
311-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_READ_TIMEOUT"), REDIS_OPT_READ_TIMEOUT);
312-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_TCP_KEEPALIVE"), REDIS_OPT_TCP_KEEPALIVE);
313-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_COMPRESSION"), REDIS_OPT_COMPRESSION);
314-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_REPLY_LITERAL"), REDIS_OPT_REPLY_LITERAL);
315-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_COMPRESSION_LEVEL"), REDIS_OPT_COMPRESSION_LEVEL);
316-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_NULL_MULTIBULK_AS_NULL"), REDIS_OPT_NULL_MBULK_AS_NULL);
317-
318-
/* serializer */
319-
zend_declare_class_constant_long(ce, ZEND_STRL("SERIALIZER_NONE"), REDIS_SERIALIZER_NONE);
320-
zend_declare_class_constant_long(ce, ZEND_STRL("SERIALIZER_PHP"), REDIS_SERIALIZER_PHP);
321-
#ifdef HAVE_REDIS_IGBINARY
322-
zend_declare_class_constant_long(ce, ZEND_STRL("SERIALIZER_IGBINARY"), REDIS_SERIALIZER_IGBINARY);
323-
#endif
324-
#ifdef HAVE_REDIS_MSGPACK
325-
zend_declare_class_constant_long(ce, ZEND_STRL("SERIALIZER_MSGPACK"), REDIS_SERIALIZER_MSGPACK);
326-
#endif
327-
zend_declare_class_constant_long(ce, ZEND_STRL("SERIALIZER_JSON"), REDIS_SERIALIZER_JSON);
328-
329-
/* compression */
330-
zend_declare_class_constant_long(ce, ZEND_STRL("COMPRESSION_NONE"), REDIS_COMPRESSION_NONE);
331-
#ifdef HAVE_REDIS_LZF
332-
zend_declare_class_constant_long(ce, ZEND_STRL("COMPRESSION_LZF"), REDIS_COMPRESSION_LZF);
333-
#endif
334-
#ifdef HAVE_REDIS_ZSTD
335-
zend_declare_class_constant_long(ce, ZEND_STRL("COMPRESSION_ZSTD"), REDIS_COMPRESSION_ZSTD);
336-
zend_declare_class_constant_long(ce, ZEND_STRL("COMPRESSION_ZSTD_MIN"), 1);
337-
#ifdef ZSTD_CLEVEL_DEFAULT
338-
zend_declare_class_constant_long(ce, ZEND_STRL("COMPRESSION_ZSTD_DEFAULT"), ZSTD_CLEVEL_DEFAULT);
339-
#else
340-
zend_declare_class_constant_long(ce, ZEND_STRL("COMPRESSION_ZSTD_DEFAULT"), 3);
341-
#endif
342-
zend_declare_class_constant_long(ce, ZEND_STRL("COMPRESSION_ZSTD_MAX"), ZSTD_maxCLevel());
343-
#endif
344-
345-
#ifdef HAVE_REDIS_LZ4
346-
zend_declare_class_constant_long(ce, ZEND_STRL("COMPRESSION_LZ4"), REDIS_COMPRESSION_LZ4);
347-
#endif
348-
349-
/* scan options*/
350-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_SCAN"), REDIS_OPT_SCAN);
351-
zend_declare_class_constant_long(ce, ZEND_STRL("SCAN_RETRY"), REDIS_SCAN_RETRY);
352-
zend_declare_class_constant_long(ce, ZEND_STRL("SCAN_NORETRY"), REDIS_SCAN_NORETRY);
353-
zend_declare_class_constant_long(ce, ZEND_STRL("SCAN_PREFIX"), REDIS_SCAN_PREFIX);
354-
zend_declare_class_constant_long(ce, ZEND_STRL("SCAN_NOPREFIX"), REDIS_SCAN_NOPREFIX);
355-
356-
zend_declare_class_constant_stringl(ce, "AFTER", 5, "after", 5);
357-
zend_declare_class_constant_stringl(ce, "BEFORE", 6, "before", 6);
358-
359-
if (is_cluster) {
360-
/* Cluster option to allow for slave failover */
361-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_SLAVE_FAILOVER"), REDIS_OPT_FAILOVER);
362-
zend_declare_class_constant_long(ce, ZEND_STRL("FAILOVER_NONE"), REDIS_FAILOVER_NONE);
363-
zend_declare_class_constant_long(ce, ZEND_STRL("FAILOVER_ERROR"), REDIS_FAILOVER_ERROR);
364-
zend_declare_class_constant_long(ce, ZEND_STRL("FAILOVER_DISTRIBUTE"), REDIS_FAILOVER_DISTRIBUTE);
365-
zend_declare_class_constant_long(ce, ZEND_STRL("FAILOVER_DISTRIBUTE_SLAVES"), REDIS_FAILOVER_DISTRIBUTE_SLAVES);
366-
} else {
367-
/* Cluster doesn't support pipelining at this time */
368-
zend_declare_class_constant_long(ce, ZEND_STRL("PIPELINE"), PIPELINE);
369-
370-
zend_declare_class_constant_stringl(ce, ZEND_STRL("LEFT"), ZEND_STRL("left"));
371-
zend_declare_class_constant_stringl(ce, ZEND_STRL("RIGHT"), ZEND_STRL("right"));
372-
}
373-
374-
/* retry/backoff options*/
375-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_MAX_RETRIES"), REDIS_OPT_MAX_RETRIES);
376-
377-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_BACKOFF_ALGORITHM"), REDIS_OPT_BACKOFF_ALGORITHM);
378-
zend_declare_class_constant_long(ce, ZEND_STRL("BACKOFF_ALGORITHM_DEFAULT"), REDIS_BACKOFF_ALGORITHM_DEFAULT);
379-
zend_declare_class_constant_long(ce, ZEND_STRL("BACKOFF_ALGORITHM_CONSTANT"), REDIS_BACKOFF_ALGORITHM_CONSTANT);
380-
zend_declare_class_constant_long(ce, ZEND_STRL("BACKOFF_ALGORITHM_UNIFORM"), REDIS_BACKOFF_ALGORITHM_UNIFORM);
381-
zend_declare_class_constant_long(ce, ZEND_STRL("BACKOFF_ALGORITHM_EXPONENTIAL"), REDIS_BACKOFF_ALGORITHM_EXPONENTIAL);
382-
zend_declare_class_constant_long(ce, ZEND_STRL("BACKOFF_ALGORITHM_FULL_JITTER"), REDIS_BACKOFF_ALGORITHM_FULL_JITTER);
383-
zend_declare_class_constant_long(ce, ZEND_STRL("BACKOFF_ALGORITHM_EQUAL_JITTER"), REDIS_BACKOFF_ALGORITHM_EQUAL_JITTER);
384-
zend_declare_class_constant_long(ce, ZEND_STRL("BACKOFF_ALGORITHM_DECORRELATED_JITTER"), REDIS_BACKOFF_ALGORITHM_DECORRELATED_JITTER);
385-
386-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_BACKOFF_BASE"), REDIS_OPT_BACKOFF_BASE);
387-
388-
zend_declare_class_constant_long(ce, ZEND_STRL("OPT_BACKOFF_CAP"), REDIS_OPT_BACKOFF_CAP);
389-
}
390-
391293
static ZEND_RSRC_DTOR_FUNC(redis_connections_pool_dtor)
392294
{
393295
if (res->ptr) {
@@ -462,10 +364,6 @@ PHP_MINIT_FUNCTION(redis)
462364
/* RedisException class */
463365
redis_exception_ce = register_class_RedisException(spl_ce_RuntimeException);
464366

465-
/* Add shared class constants to Redis and RedisCluster objects */
466-
add_class_constants(redis_ce, 0);
467-
add_class_constants(redis_cluster_ce, 1);
468-
469367
#ifdef PHP_SESSION
470368
php_session_register_module(&ps_mod_redis);
471369
php_session_register_module(&ps_mod_redis_cluster);

0 commit comments

Comments
 (0)