PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - ext/mysqlnd - mysqlnd_plugin.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 27 35 77.1 %
Date: 2015-07-31 Functions: 7 8 87.5 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :   +----------------------------------------------------------------------+
       3             :   | PHP Version 7                                                        |
       4             :   +----------------------------------------------------------------------+
       5             :   | Copyright (c) 2006-2015 The PHP Group                                |
       6             :   +----------------------------------------------------------------------+
       7             :   | This source file is subject to version 3.01 of the PHP license,      |
       8             :   | that is bundled with this package in the file LICENSE, and is        |
       9             :   | available through the world-wide-web at the following url:           |
      10             :   | http://www.php.net/license/3_01.txt                                  |
      11             :   | If you did not receive a copy of the PHP license and are unable to   |
      12             :   | obtain it through the world-wide-web, please send a note to          |
      13             :   | license@php.net so we can mail you a copy immediately.               |
      14             :   +----------------------------------------------------------------------+
      15             :   | Authors: Andrey Hristov <andrey@mysql.com>                           |
      16             :   |          Ulf Wendel <uwendel@mysql.com>                              |
      17             :   |          Georg Richter <georg@mysql.com>                             |
      18             :   +----------------------------------------------------------------------+
      19             : */
      20             : 
      21             : /* $Id: mysqlnd.c 306407 2010-12-16 12:56:19Z andrey $ */
      22             : #include "php.h"
      23             : #include "mysqlnd.h"
      24             : #include "mysqlnd_priv.h"
      25             : #include "mysqlnd_statistics.h"
      26             : #include "mysqlnd_debug.h"
      27             : 
      28             : /*--------------------------------------------------------------------*/
      29             : #if defined(MYSQLND_DBG_ENABLED) && MYSQLND_DBG_ENABLED == 1
      30             : static enum_func_status mysqlnd_example_plugin_end(void * p);
      31             : 
      32             : static MYSQLND_STATS * mysqlnd_plugin_example_stats = NULL;
      33             : 
      34             : enum mysqlnd_plugin_example_collected_stats
      35             : {
      36             :         EXAMPLE_STAT1,
      37             :         EXAMPLE_STAT2,
      38             :         EXAMPLE_STAT_LAST
      39             : };
      40             : 
      41             : static const MYSQLND_STRING mysqlnd_plugin_example_stats_values_names[EXAMPLE_STAT_LAST] =
      42             : {
      43             :         { MYSQLND_STR_W_LEN("stat1") },
      44             :         { MYSQLND_STR_W_LEN("stat2") }
      45             : };
      46             : 
      47             : static struct st_mysqlnd_typeii_plugin_example mysqlnd_example_plugin =
      48             : {
      49             :         {
      50             :                 MYSQLND_PLUGIN_API_VERSION,
      51             :                 "example",
      52             :                 10001L,
      53             :                 "1.00.01",
      54             :                 "PHP License",
      55             :                 "Andrey Hristov <andrey@php.net>",
      56             :                 {
      57             :                         NULL, /* will be filled later */
      58             :                         mysqlnd_plugin_example_stats_values_names,
      59             :                 },
      60             :                 {
      61             :                         mysqlnd_example_plugin_end
      62             :                 }
      63             :         },
      64             :         NULL,   /* methods */
      65             : };
      66             : 
      67             : 
      68             : /* {{{ mysqlnd_example_plugin_end */
      69             : static
      70             : enum_func_status mysqlnd_example_plugin_end(void * p)
      71             : {
      72             :         struct st_mysqlnd_typeii_plugin_example * plugin = (struct st_mysqlnd_typeii_plugin_example *) p;
      73             :         DBG_ENTER("mysqlnd_example_plugin_end");
      74             :         mysqlnd_stats_end(plugin->plugin_header.plugin_stats.values);
      75             :         plugin->plugin_header.plugin_stats.values = NULL;
      76             :         DBG_RETURN(PASS);
      77             : }
      78             : /* }}} */
      79             : 
      80             : 
      81             : /* {{{ mysqlnd_example_plugin_register */
      82             : void
      83             : mysqlnd_example_plugin_register(void)
      84             : {
      85             :         mysqlnd_stats_init(&mysqlnd_plugin_example_stats, EXAMPLE_STAT_LAST);
      86             :         mysqlnd_example_plugin.plugin_header.plugin_stats.values = mysqlnd_plugin_example_stats;
      87             :         mysqlnd_plugin_register_ex((struct st_mysqlnd_plugin_header *) &mysqlnd_example_plugin);
      88             : }
      89             : /* }}} */
      90             : #endif /* defined(MYSQLND_DBG_ENABLED) && MYSQLND_DBG_ENABLED == 1 */
      91             : /*--------------------------------------------------------------------*/
      92             : 
      93             : static HashTable mysqlnd_registered_plugins;
      94             : 
      95             : static unsigned int mysqlnd_plugins_counter = 0;
      96             : 
      97             : 
      98             : /* {{{ mysqlnd_plugin_subsystem_init */
      99             : void
     100       21049 : mysqlnd_plugin_subsystem_init(void)
     101             : {
     102       21049 :         zend_hash_init(&mysqlnd_registered_plugins, 4 /* initial hash size */, NULL /* hash_func */, NULL /* dtor */, TRUE /* pers */);
     103       21049 : }
     104             : /* }}} */
     105             : 
     106             : 
     107             : /* {{{ mysqlnd_plugin_end_apply_func */
     108             : int
     109      105425 : mysqlnd_plugin_end_apply_func(zval *el)
     110             : {
     111      105425 :         struct st_mysqlnd_plugin_header * plugin_header = (struct st_mysqlnd_plugin_header *)Z_PTR_P(el);
     112      105425 :         if (plugin_header->m.plugin_shutdown) {
     113           0 :                 plugin_header->m.plugin_shutdown(plugin_header);
     114             :         }
     115      105425 :         return ZEND_HASH_APPLY_REMOVE;
     116             : }
     117             : /* }}} */
     118             : 
     119             : 
     120             : /* {{{ mysqlnd_plugin_subsystem_end */
     121             : void
     122       21085 : mysqlnd_plugin_subsystem_end(void)
     123             : {
     124       21085 :         zend_hash_apply(&mysqlnd_registered_plugins, mysqlnd_plugin_end_apply_func);
     125       21085 :         zend_hash_destroy(&mysqlnd_registered_plugins);
     126       21085 : }
     127             : /* }}} */
     128             : 
     129             : 
     130             : /* {{{ mysqlnd_plugin_register */
     131           0 : PHPAPI unsigned int mysqlnd_plugin_register()
     132             : {
     133           0 :         return mysqlnd_plugin_register_ex(NULL);
     134             : }
     135             : /* }}} */
     136             : 
     137             : 
     138             : /* {{{ mysqlnd_plugin_register_ex */
     139      105245 : PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header * plugin)
     140             : {
     141      105245 :         if (plugin) {
     142      105245 :                 if (plugin->plugin_api_version == MYSQLND_PLUGIN_API_VERSION) {
     143      105245 :                         zend_hash_str_update_ptr(&mysqlnd_registered_plugins, plugin->plugin_name, strlen(plugin->plugin_name), plugin);
     144             :                 } else {
     145           0 :                         php_error_docref(NULL, E_WARNING, "Plugin API version mismatch while loading plugin %s. Expected %d, got %d",
     146             :                                                         plugin->plugin_name, MYSQLND_PLUGIN_API_VERSION, plugin->plugin_api_version);
     147           0 :                         return 0xCAFE;
     148             :                 }
     149             :         }
     150      105245 :         return mysqlnd_plugins_counter++;
     151             : }
     152             : /* }}} */
     153             : 
     154             : 
     155             : /* {{{ mysqlnd_plugin_find */
     156        1739 : PHPAPI void * mysqlnd_plugin_find(const char * const name)
     157             : {
     158             :         void * plugin;
     159        3478 :         if ((plugin = zend_hash_str_find_ptr(&mysqlnd_registered_plugins, name, strlen(name))) != NULL) {
     160        1739 :                 return plugin;
     161             :         }
     162           0 :         return NULL;
     163             : }
     164             : /* }}} */
     165             : 
     166             : 
     167             : /* {{{ mysqlnd_plugin_apply_with_argument */
     168         284 : PHPAPI void mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void * argument)
     169             : {
     170             :         zval *val;
     171             :         int result;
     172             : 
     173        3124 :         ZEND_HASH_FOREACH_VAL(&mysqlnd_registered_plugins, val) {
     174        1420 :                 result = apply_func(val, argument);
     175        1420 :                 if (result & ZEND_HASH_APPLY_REMOVE) {
     176           0 :                         php_error_docref(NULL, E_WARNING, "mysqlnd_plugin_apply_with_argument must not remove table entries");
     177             :                 }
     178        1420 :                 if (result & ZEND_HASH_APPLY_STOP) {
     179           0 :                         break;
     180             :                 }
     181             :         } ZEND_HASH_FOREACH_END();
     182         284 : }
     183             : /* }}} */
     184             : 
     185             : 
     186             : /* {{{ mysqlnd_plugin_count */
     187       33198 : PHPAPI unsigned int mysqlnd_plugin_count()
     188             : {
     189       33198 :         return mysqlnd_plugins_counter;
     190             : }
     191             : /* }}} */
     192             : 
     193             : 
     194             : /*
     195             :  * Local variables:
     196             :  * tab-width: 4
     197             :  * c-basic-offset: 4
     198             :  * End:
     199             :  * vim600: noet sw=4 ts=4 fdm=marker
     200             :  * vim<600: noet sw=4 ts=4
     201             :  */

Generated by: LCOV version 1.10

Generated at Fri, 31 Jul 2015 08:58:52 +0000 (18 hours ago)

Copyright © 2005-2015 The PHP Group
All rights reserved.