Skip to content

Commit

Permalink
update to 0.9.2 & fixed #7
Browse files Browse the repository at this point in the history
  • Loading branch information
Neeke committed Jan 9, 2017
1 parent 7300b9e commit 78251c0
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 28 deletions.
4 changes: 3 additions & 1 deletion CodeTips/DruidCodeTips.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
*/
class Druid
{
const DRUID_INSTANCE_DEFAULT = 'default';

/**
* @var Druid
*/
Expand All @@ -14,7 +16,7 @@ class Druid
/**
* @return Druid
*/
static public function getInstance($instance_name = 'default')
static public function getInstance($instance_name)
{
if (self::$Druid == NULL) {
self::$Druid = array();
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ $ pecl install Druid
try {
$Druid_1 = Druid::getInstance();
$Druid_1 = Druid::getInstance(Druid::DRUID_INSTANCE_DEFAULT);
$Druid_1->debugWitch(TRUE);
/**
Expand Down
113 changes: 98 additions & 15 deletions druid.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
#define DRUID_ADD_ASSOC_LONG_EX(z, s, l, v) add_assoc_long_ex(&z, s, l, (long) v)
#define DRUID_ADD_ASSOC_DOUBLE_EX(z, s, l, v) add_assoc_double_ex(&z, s, l, (double) v)
#define DRUID_ADD_ASSOC_ZVAL_EX(z, s, l, zn) add_assoc_zval_ex(z, s, l, zn)
#define DRUID_ADD_ASSOC_ZVAL_EX_AND(z, s, l, zn) add_assoc_zval_ex(&z, s, l, zn)
#define DRUID_ADD_ASSOC_STRING_EX(a, k, l, s) add_assoc_string_ex(&a, k, l, s)
#define DRUID_ADD_NEXT_INDEX_STRING(a, s) add_next_index_string(a, s)
#define DRUID_ADD_NEXT_INDEX_STRINGL(a, s, l) add_next_index_stringl(a, s, l)
Expand All @@ -51,7 +52,9 @@

#define DRUID_ZEND_READ_PROPERTY(ce,z,zl) zend_read_property(ce, z, zl, 1, NULL)
#define DRUID_ZEND_UPDATE_PROPERTY(ce,z,zl,zn) zend_update_property(ce, z, zl, zn)
#define DRUID_ZEND_UPDATE_STATIC_PROPERTY(ce,zl,zn) zend_update_static_property(ce, zl, &zn)
#define DRUID_ZEND_UPDATE_PROPERTY_LONG(ce,z,zl,zn) zend_update_property_long(ce,z,zl,zn)

#else

#define DRUID_ZVAL_STRING(z, s) ZVAL_STRING(z, s, 1)
Expand All @@ -63,6 +66,7 @@
#define DRUID_ADD_ASSOC_LONG_EX(z, s, l, v) add_assoc_long_ex(z, s, l, (long) v)
#define DRUID_ADD_ASSOC_DOUBLE_EX(z, s, l, v) add_assoc_double_ex(z, s, l, (double) v)
#define DRUID_ADD_ASSOC_ZVAL_EX(z, s, l, zn) add_assoc_zval_ex(z, s, l, zn)
#define DRUID_ADD_ASSOC_ZVAL_EX_AND(z, s, l, zn) add_assoc_zval_ex(z, s, l, zn)
#define DRUID_ADD_ASSOC_STRING_EX(a, k, l, s) add_assoc_string_ex(a, k, l, s, 1)
#define DRUID_ADD_NEXT_INDEX_STRING(a, s) add_next_index_string(a, s, 1)
#define DRUID_ADD_NEXT_INDEX_STRINGL(a, s, l) add_next_index_stringl(a, s, l, 1)
Expand All @@ -71,6 +75,7 @@

#define DRUID_ZEND_READ_PROPERTY(ce,z,zl) zend_read_property(ce, z, zl, 1 TSRMLS_CC)
#define DRUID_ZEND_UPDATE_PROPERTY(ce,z,zl,zn) zend_update_property(ce, z, zl, zn TSRMLS_CC)
#define DRUID_ZEND_UPDATE_STATIC_PROPERTY(ce,zl,zn) zend_update_static_property(ce, zl, zn TSRMLS_CC)
#define DRUID_ZEND_UPDATE_PROPERTY_LONG(ce,z,zl,zn) zend_update_property_long(ce,z,zl,zn TSRMLS_CC)
#endif

Expand Down Expand Up @@ -102,8 +107,8 @@ const zend_function_entry druid_functions[] =
ZEND_BEGIN_ARG_INFO_EX(druid_void_arginfo, 0, 0, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(druid_getinstance_arginfo, 0, 0, 0)
// ZEND_ARG_INFO(0, instance_name)
ZEND_BEGIN_ARG_INFO_EX(druid_getinstance_arginfo, 0, 0, 1)
ZEND_ARG_INFO(0, instance_name)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(druid_debug_arginfo, 0, 0, 1)
Expand Down Expand Up @@ -202,6 +207,7 @@ PHP_MINIT_FUNCTION(druid)
#endif

zend_declare_class_constant_stringl(druid_ce,ZEND_STRL("DRUID_CONTENT_TYPE"),ZEND_STRL(DRUID_CONTENT_TYPE) TSRMLS_CC);
zend_declare_class_constant_stringl(druid_ce,ZEND_STRL("DRUID_INSTANCE_DEFAULT"),ZEND_STRL(DRUID_INSTANCE_DEFAULT) TSRMLS_CC);

zend_declare_property_null(druid_ce, ZEND_STRL(DRUID_NAME), ZEND_ACC_STATIC | ZEND_ACC_PROTECTED TSRMLS_CC);

Expand Down Expand Up @@ -252,32 +258,109 @@ PHP_MINFO_FUNCTION(druid)

PHP_METHOD(DRUID_NAME, getInstance)
{
int argc = ZEND_NUM_ARGS();
char *instance_name;
zval *get_instance_array = NULL;

#if PHP_VERSION_ID >= 70000
size_t instance_name_len;
zval *ppzval = NULL;
zval set_instance_array;
#else
int instance_name_len;
zval **ppzval = NULL;
zval *set_instance_array;
#endif

zval *instance;

instance = zend_read_static_property(druid_ce, ZEND_STRL(DRUID_NAME), 1 TSRMLS_CC);
//In php7 , this params instance_name can not be empty.
#if PHP_VERSION_ID >= 70000
if (zend_parse_parameters(argc TSRMLS_CC, "s", &instance_name, &instance_name_len) == FAILURE)
{
zend_throw_exception(php_com_exception_class_entry,"The instance_name can not be empty,you can use Druid::DRUID_INSTANCE_DEFAULT",999 TSRMLS_CC);
RETURN_FALSE;
}
#else
if (zend_parse_parameters(argc TSRMLS_CC, "|s", &instance_name, &instance_name_len) == FAILURE)
{
RETURN_FALSE;
}
#endif

if (argc < 1)
{
instance_name = DRUID_INSTANCE_DEFAULT;
instance_name_len = DRUID_INSTANCE_DEFAULT_LEN;
}

get_instance_array = zend_read_static_property(druid_ce, ZEND_STRL(DRUID_NAME), 1 TSRMLS_CC);

if (IS_OBJECT == Z_TYPE_P(instance)
&& instanceof_function(Z_OBJCE_P(instance), druid_ce TSRMLS_CC))
if (get_instance_array && Z_TYPE_P(get_instance_array) == IS_ARRAY)
{
//Do Nothing

#if PHP_VERSION_ID >= 70000
if ((ppzval = zend_hash_str_find(Z_ARRVAL_P(get_instance_array),instance_name,instance_name_len)) != NULL)
{
RETURN_ZVAL(ppzval, 1, 0);
}
else
{
goto initInstance;
}
#else
if (zend_hash_find(Z_ARRVAL_P(get_instance_array), ZEND_STRL(instance_name), (void **)&ppzval) == SUCCESS )
{
RETURN_ZVAL(*ppzval, 1, 0);
}
else
{
goto initInstance;
}
#endif
}
else
{
object_init_ex(instance, druid_ce);
#if PHP_VERSION_ID >= 70000
array_init(&set_instance_array);
#else
MAKE_STD_ZVAL(set_instance_array);
array_init(set_instance_array);
#endif
goto initInstance;
}

initInstance:
#if PHP_VERSION_ID >= 70000

#else
MAKE_STD_ZVAL(instance);
#endif

DRUID_ZEND_UPDATE_PROPERTY_LONG(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_CURL_ERR_NO), 0);
zend_update_property_string(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_CURL_ERR_STR), "" TSRMLS_CC);
object_init_ex(instance, druid_ce);

zend_update_property_string(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_TPL_PATH), DRUID_G(tpl_path) TSRMLS_CC);
DRUID_ZEND_UPDATE_PROPERTY_LONG(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_CURL_ERR_NO), 0);
zend_update_property_string(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_CURL_ERR_STR), "" TSRMLS_CC);

DRUID_ZEND_UPDATE_PROPERTY_LONG(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_RESPONSE_CODE), 0);
zend_update_property_null(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_RESPONSE_INFO) TSRMLS_CC);
zend_update_property_string(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_TPL_PATH), DRUID_G(tpl_path) TSRMLS_CC);

zend_update_property_null(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_HOSTS) TSRMLS_CC);
zend_update_property_bool(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_HOST_RAND), 0 TSRMLS_CC);
DRUID_ZEND_UPDATE_PROPERTY_LONG(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_RESPONSE_CODE), 0);
zend_update_property_null(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_RESPONSE_INFO) TSRMLS_CC);

zend_update_property_null(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_HOSTS) TSRMLS_CC);
zend_update_property_bool(druid_ce, instance, ZEND_STRL(DRUID_PROPERTY_HOST_RAND), 0 TSRMLS_CC);

if (get_instance_array && IS_ARRAY == Z_TYPE_P(get_instance_array))
{
DRUID_ADD_ASSOC_ZVAL_EX(get_instance_array,instance_name,instance_name_len,instance);
zend_update_static_property(druid_ce, ZEND_STRL(DRUID_NAME), get_instance_array TSRMLS_CC);
}
else
{
DRUID_ADD_ASSOC_ZVAL_EX_AND(set_instance_array,instance_name,instance_name_len,instance);
DRUID_ZEND_UPDATE_STATIC_PROPERTY(druid_ce, ZEND_STRL(DRUID_NAME), set_instance_array);

zend_update_static_property(druid_ce, ZEND_STRL(DRUID_NAME), instance TSRMLS_CC);
zval_ptr_dtor(&set_instance_array);
}

RETURN_ZVAL(instance, 1, 0);
Expand Down
5 changes: 4 additions & 1 deletion php_druid.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

#define DRUID_NAME "Druid"
#define DRUID_CREDITS "[email protected]"
#define PHP_DRUID_VERSION "0.9.1"
#define PHP_DRUID_VERSION "0.9.2"

#define DRUID_CONTENT_TYPE "Content-Type:application/json"
#define DRUID_PROPERTY_CURL_ERR_NO "_curl_error_no"
Expand All @@ -36,6 +36,9 @@
#define DRUID_PROPERTY_HOST_RAND "host_rand"
#define DRUID_PROPERTY_HOST_RAND_BAR (double)0.5

#define DRUID_INSTANCE_DEFAULT "default"
#define DRUID_INSTANCE_DEFAULT_LEN strlen(DRUID_INSTANCE_DEFAULT)

#define DRUID_RESPONSE_CODE_ERROR_BAR 399

extern zend_module_entry druid_module_entry;
Expand Down
2 changes: 1 addition & 1 deletion tests/druid.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

$request_json = '{"queryType":"timeseries","dataSource":"agentTopic-1m","granularity":{"type":"duration","duration":"300000"},"intervals":["2016-12-10T14:06:00.000Z/2016-12-18T14:36:00.000Z"],"filter":{"type":"and","fields":[{"type":"selector","dimension":"accountId","value":"107"},{"type":"selector","dimension":"hostId","value":"10675435376182376"},{"type":"selector","dimension":"serviceType","value":"101"}]},"aggregations":[{"type":"doubleSum","name":"oneMinute","fieldName":"oneMinute"},{"type":"doubleSum","name":"fiveMinute","fieldName":"fiveMinute"},{"type":"doubleSum","name":"fifteenMinute","fieldName":"fifteenMinute"},{"type":"longSum","name":"count","fieldName":"count"}],"postAggregations":[{"type":"arithmetic","name":"oneMinuteAvg","fn":"/","fields":[{"type":"fieldAccess","name":"oneMinute","fieldName":"oneMinute"},{"type":"fieldAccess","name":"count","fieldName":"count"}]},{"type":"arithmetic","name":"fiveMinuteAvg","fn":"/","fields":[{"type":"fieldAccess","name":"fiveMinute","fieldName":"fiveMinute"},{"type":"fieldAccess","name":"count","fieldName":"count"}]},{"type":"arithmetic","name":"fifteenMinuteAvg","fn":"/","fields":[{"type":"fieldAccess","name":"fifteenMinute","fieldName":"fifteenMinute"},{"type":"fieldAccess","name":"count","fieldName":"count"}]}]}';

$druid = Druid::getInstance();
$druid = Druid::getInstance(Druid::DRUID_INSTANCE_DEFAULT);

$array = array("bbbbb","cccccc","dddddd","eeeeee");

Expand Down
17 changes: 8 additions & 9 deletions tests/issue7.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,16 @@
* @author [email protected]
* Date: 17/1/9 下午3:47
*/


$Druid_1 = Druid::getInstance('druid_1');
$Druid_1 = Druid::getInstance(Druid::DRUID_INSTANCE_DEFAULT);
$Druid_2 = Druid::getInstance('druid_2');


$Druid_1->aa = TRUE;
$Druid_1->bb = TRUE;
$Druid_1->debugWitch(TRUE);

$Druid_2->debugWitch(FALSE);
$Druid_2->bb = TRUE;

$Druid_2->cc = TRUE;
$Druid_2->dd = TRUE;
$Druid_3 = Druid::getInstance(Druid::DRUID_INSTANCE_DEFAULT);
$Druid_4 = Druid::getInstance('druid_2');

echo '<pre>';
exit(var_dump($Druid_1, $Druid_2));
var_dump($Druid_1 == $Druid_3, $Druid_2 == $Druid_4);

0 comments on commit 78251c0

Please sign in to comment.