@@ -69,6 +69,8 @@ static zend_function_entry redis_functions[] = {
6969 PHP_ME (Redis , sortDescAlpha , NULL , ZEND_ACC_PUBLIC )
7070 PHP_ME (Redis , lPush , NULL , ZEND_ACC_PUBLIC )
7171 PHP_ME (Redis , rPush , NULL , ZEND_ACC_PUBLIC )
72+ PHP_ME (Redis , lPushx , NULL , ZEND_ACC_PUBLIC )
73+ PHP_ME (Redis , rPushx , NULL , ZEND_ACC_PUBLIC )
7274 PHP_ME (Redis , lPop , NULL , ZEND_ACC_PUBLIC )
7375 PHP_ME (Redis , rPop , NULL , ZEND_ACC_PUBLIC )
7476 PHP_ME (Redis , lSize , NULL , ZEND_ACC_PUBLIC )
@@ -77,6 +79,7 @@ static zend_function_entry redis_functions[] = {
7779 PHP_ME (Redis , lGet , NULL , ZEND_ACC_PUBLIC )
7880 PHP_ME (Redis , lGetRange , NULL , ZEND_ACC_PUBLIC )
7981 PHP_ME (Redis , lSet , NULL , ZEND_ACC_PUBLIC )
82+ PHP_ME (Redis , lInsert , NULL , ZEND_ACC_PUBLIC )
8083 PHP_ME (Redis , sAdd , NULL , ZEND_ACC_PUBLIC )
8184 PHP_ME (Redis , sSize , NULL , ZEND_ACC_PUBLIC )
8285 PHP_ME (Redis , sRemove , NULL , ZEND_ACC_PUBLIC )
@@ -279,6 +282,9 @@ PHP_MINIT_FUNCTION(redis)
279282 add_constant_long (redis_ce , "MULTI" , MULTI );
280283 add_constant_long (redis_ce , "PIPELINE" , PIPELINE );
281284
285+ zend_declare_class_constant_stringl (redis_ce , "AFTER" , 5 , "after" , 5 TSRMLS_CC );
286+ zend_declare_class_constant_stringl (redis_ce , "BEFORE" , 6 , "before" , 6 TSRMLS_CC );
287+
282288 return SUCCESS ;
283289}
284290
@@ -968,6 +974,52 @@ PHP_METHOD(Redis, rPush)
968974}
969975/* }}} */
970976
977+ PHP_METHOD (Redis , lInsert )
978+ {
979+
980+ zval * object ;
981+ RedisSock * redis_sock ;
982+ zval * z_array , * * z_curr ;
983+ char * pivot , * position , * key , * val , * cmd ;
984+ int pivot_len , position_len , key_len , val_len , cmd_len ;
985+
986+
987+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Ossss" ,
988+ & object , redis_ce ,
989+ & key , & key_len ,
990+ & position , & position_len ,
991+ & pivot , & pivot_len ,
992+ & val , & val_len ) == FAILURE ) {
993+ RETURN_NULL ();
994+ }
995+
996+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
997+ RETURN_FALSE ;
998+ }
999+
1000+ if (strncasecmp (position , "after" , 5 ) == 0 || strncasecmp (position , "before" , 6 ) == 0 ) {
1001+ cmd_len = redis_cmd_format_static (& cmd , "LINSERT" , "ssss" , key , key_len , position , position_len , pivot , pivot_len , val , val_len );
1002+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
1003+ IF_ATOMIC () {
1004+ redis_long_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
1005+ }
1006+ REDIS_PROCESS_RESPONSE (redis_long_response );
1007+ } else {
1008+ php_error_docref (NULL TSRMLS_CC , E_ERROR , "Error on position ");
1009+ }
1010+
1011+ }
1012+
1013+ PHP_METHOD (Redis , lPushx )
1014+ {
1015+ generic_push_function (INTERNAL_FUNCTION_PARAM_PASSTHRU , "LPUSHX" , sizeof ("LPUSHX" )- 1 );
1016+ }
1017+
1018+ PHP_METHOD (Redis , rPushx )
1019+ {
1020+ generic_push_function (INTERNAL_FUNCTION_PARAM_PASSTHRU , "RPUSHX" , sizeof ("RPUSHX" )- 1 );
1021+ }
1022+
9711023PHPAPI void
9721024generic_pop_function (INTERNAL_FUNCTION_PARAMETERS , char * keyword , int keyword_len ) {
9731025
0 commit comments