Skip to content

Commit

Permalink
Merge pull request #1132 from sjinks/sql-query
Browse files Browse the repository at this point in the history
Use interned strings in mvc/model/query.c
  • Loading branch information
Phalcon committed Aug 22, 2013
2 parents 1066996 + 31edc11 commit 2ba3e2f
Show file tree
Hide file tree
Showing 15 changed files with 975 additions and 807 deletions.
1 change: 1 addition & 0 deletions ext/config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ kernel/alternative/fcall.c \
kernel/framework/orm.c \
kernel/framework/router.c \
kernel/framework/url.c \
interned-strings.c \
logger.c \
flash.c \
cli/dispatcher/exception.c \
Expand Down
2 changes: 1 addition & 1 deletion ext/config.w32
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ if (PHP_PHALCON != "no") {
ADD_SOURCES("ext/phalcon/mvc/model/query", "scanner.c parser.c builder.c lang.c statusinterface.c status.c builderinterface.c", "phalcon")
ADD_SOURCES("ext/phalcon/mvc/view/engine/volt", "scanner.c parser.c compiler.c", "phalcon")
ADD_SOURCES("ext/phalcon/annotations", "scanner.c parser.c reflection.c annotation.c readerinterface.c exception.c collection.c adapterinterface.c adapter.c reader.c", "phalcon")
ADD_SOURCES("ext/phalcon/.", "logger.c flash.c dispatcherinterface.c di.c cryptinterface.c db.c text.c debug.c tag.c filterinterface.c acl.c loader.c exception.c crypt.c filter.c dispatcher.c diinterface.c escaper.c config.c escaperinterface.c validation.c version.c flashinterface.c kernel.c security.c translate.c session.c", "phalcon")
ADD_SOURCES("ext/phalcon/.", "interned-strings.c logger.c flash.c dispatcherinterface.c di.c cryptinterface.c db.c text.c debug.c tag.c filterinterface.c acl.c loader.c exception.c crypt.c filter.c dispatcher.c diinterface.c escaper.c config.c escaperinterface.c validation.c version.c flashinterface.c kernel.c security.c translate.c session.c", "phalcon")
ADD_SOURCES("ext/phalcon/cli/dispatcher", "exception.c", "phalcon")
ADD_SOURCES("ext/phalcon/cli", "console.c router.c task.c dispatcher.c", "phalcon")
ADD_SOURCES("ext/phalcon/cli/router", "exception.c", "phalcon")
Expand Down
125 changes: 125 additions & 0 deletions ext/interned-strings.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
/*
+------------------------------------------------------------------------+
| Phalcon Framework |
+------------------------------------------------------------------------+
| Copyright (c) 2011-2013 Phalcon Team (http://www.phalconphp.com) |
+------------------------------------------------------------------------+
| This source file is subject to the New BSD License that is bundled |
| with this package in the file docs/LICENSE.txt. |
| |
| If you did not receive a copy of the license and are unable to |
| obtain it through the world-wide-web, please send an email |
| to [email protected] so we can send you a copy immediately. |
+------------------------------------------------------------------------+
| Authors: Andres Gutierrez <[email protected]> |
| Eduar Carvajal <[email protected]> |
| Vladimir Kolesnikov <[email protected]> |
+------------------------------------------------------------------------+
*/

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "php_phalcon.h"
#include "kernel/main.h"
#include "kernel/string.h"

#include "interned-strings.h"

const char *phalcon_interned_alias = NULL;
const char *phalcon_interned_all = NULL;
const char *phalcon_interned_arguments = NULL;
const char *phalcon_interned_balias = NULL;
const char *phalcon_interned_binary_op = NULL;
const char *phalcon_interned_column = NULL;
const char *phalcon_interned_columns = NULL;
const char *phalcon_interned_conditions = NULL;
const char *phalcon_interned_delete = NULL;
const char *phalcon_interned_distinct = NULL;
const char *phalcon_interned_domain = NULL;
const char *phalcon_interned_expr = NULL;
const char *phalcon_interned_fields = NULL;
const char *phalcon_interned_functionCall = NULL;
const char *phalcon_interned_group = NULL;
const char *phalcon_interned_groupBy = NULL;
const char *phalcon_interned_having = NULL;
const char *phalcon_interned_joins = NULL;
const char *phalcon_interned_left = NULL;
const char *phalcon_interned_limit = NULL;
const char *phalcon_interned_model = NULL;
const char *phalcon_interned_models = NULL;
const char *phalcon_interned_modelsCache = NULL;
const char *phalcon_interned_modelsManager = NULL;
const char *phalcon_interned_modelsMetadata = NULL;
const char *phalcon_interned_name = NULL;
const char *phalcon_interned_ns_alias = NULL;
const char *phalcon_interned_number = NULL;
const char *phalcon_interned_offset = NULL;
const char *phalcon_interned_op = NULL;
const char *phalcon_interned_order = NULL;
const char *phalcon_interned_orderBy = NULL;
const char *phalcon_interned_qualified = NULL;
const char *phalcon_interned_qualifiedName = NULL;
const char *phalcon_interned_right = NULL;
const char *phalcon_interned_select = NULL;
const char *phalcon_interned_sort = NULL;
const char *phalcon_interned_source = NULL;
const char *phalcon_interned_sqlAlias = NULL;
const char *phalcon_interned_table = NULL;
const char *phalcon_interned_tables = NULL;
const char *phalcon_interned_type = NULL;
const char *phalcon_interned_update = NULL;
const char *phalcon_interned_value = NULL;
const char *phalcon_interned_values = NULL;
const char *phalcon_interned_where = NULL;

void phalcon_init_interned_strings(TSRMLS_D)
{
phalcon_interned_alias = zend_new_interned_string(SS("alias"), 0 TSRMLS_CC);
phalcon_interned_all = zend_new_interned_string(SS("all"), 0 TSRMLS_CC);
phalcon_interned_arguments = zend_new_interned_string(SS("arguments"), 0 TSRMLS_CC);
phalcon_interned_balias = zend_new_interned_string(SS("balias"), 0 TSRMLS_CC);
phalcon_interned_binary_op = zend_new_interned_string(SS("binary-op"), 0 TSRMLS_CC);
phalcon_interned_column = zend_new_interned_string(SS("column"), 0 TSRMLS_CC);
phalcon_interned_columns = zend_new_interned_string(SS("columns"), 0 TSRMLS_CC);
phalcon_interned_conditions = zend_new_interned_string(SS("conditions"), 0 TSRMLS_CC);
phalcon_interned_delete = zend_new_interned_string(SS("delete"), 0 TSRMLS_CC);
phalcon_interned_distinct = zend_new_interned_string(SS("distinct"), 0 TSRMLS_CC);
phalcon_interned_domain = zend_new_interned_string(SS("domain"), 0 TSRMLS_CC);
phalcon_interned_expr = zend_new_interned_string(SS("expr"), 0 TSRMLS_CC);
phalcon_interned_fields = zend_new_interned_string(SS("fields"), 0 TSRMLS_CC);
phalcon_interned_functionCall = zend_new_interned_string(SS("functionCall"), 0 TSRMLS_CC);
phalcon_interned_group = zend_new_interned_string(SS("group"), 0 TSRMLS_CC);
phalcon_interned_groupBy = zend_new_interned_string(SS("groupBy"), 0 TSRMLS_CC);
phalcon_interned_having = zend_new_interned_string(SS("having"), 0 TSRMLS_CC);
phalcon_interned_joins = zend_new_interned_string(SS("joins"), 0 TSRMLS_CC);
phalcon_interned_left = zend_new_interned_string(SS("left"), 0 TSRMLS_CC);
phalcon_interned_limit = zend_new_interned_string(SS("limit"), 0 TSRMLS_CC);
phalcon_interned_model = zend_new_interned_string(SS("model"), 0 TSRMLS_CC);
phalcon_interned_models = zend_new_interned_string(SS("models"), 0 TSRMLS_CC);
phalcon_interned_modelsCache = zend_new_interned_string(SS("modelsCache"), 0 TSRMLS_CC);
phalcon_interned_modelsManager = zend_new_interned_string(SS("modelsManager"), 0 TSRMLS_CC);
phalcon_interned_modelsMetadata = zend_new_interned_string(SS("modelsMetadata"), 0 TSRMLS_CC);
phalcon_interned_name = zend_new_interned_string(SS("name"), 0 TSRMLS_CC);
phalcon_interned_ns_alias = zend_new_interned_string(SS("ns-alias"), 0 TSRMLS_CC);
phalcon_interned_number = zend_new_interned_string(SS("number"), 0 TSRMLS_CC);
phalcon_interned_offset = zend_new_interned_string(SS("offset"), 0 TSRMLS_CC);
phalcon_interned_op = zend_new_interned_string(SS("op"), 0 TSRMLS_CC);
phalcon_interned_order = zend_new_interned_string(SS("order"), 0 TSRMLS_CC);
phalcon_interned_orderBy = zend_new_interned_string(SS("orderBy"), 0 TSRMLS_CC);
phalcon_interned_qualified = zend_new_interned_string(SS("qualified"), 0 TSRMLS_CC);
phalcon_interned_qualifiedName = zend_new_interned_string(SS("qualifiedName"), 0 TSRMLS_CC);
phalcon_interned_right = zend_new_interned_string(SS("right"), 0 TSRMLS_CC);
phalcon_interned_select = zend_new_interned_string(SS("select"), 0 TSRMLS_CC);
phalcon_interned_sort = zend_new_interned_string(SS("sort"), 0 TSRMLS_CC);
phalcon_interned_source = zend_new_interned_string(SS("source"), 0 TSRMLS_CC);
phalcon_interned_sqlAlias = zend_new_interned_string(SS("sqlAlias"), 0 TSRMLS_CC);
phalcon_interned_table = zend_new_interned_string(SS("table"), 0 TSRMLS_CC);
phalcon_interned_tables = zend_new_interned_string(SS("tables"), 0 TSRMLS_CC);
phalcon_interned_type = zend_new_interned_string(SS("type"), 0 TSRMLS_CC);
phalcon_interned_update = zend_new_interned_string(SS("update"), 0 TSRMLS_CC);
phalcon_interned_value = zend_new_interned_string(SS("value"), 0 TSRMLS_CC);
phalcon_interned_values = zend_new_interned_string(SS("values"), 0 TSRMLS_CC);
phalcon_interned_where = zend_new_interned_string(SS("where"), 0 TSRMLS_CC);
}
74 changes: 74 additions & 0 deletions ext/interned-strings.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
+------------------------------------------------------------------------+
| Phalcon Framework |
+------------------------------------------------------------------------+
| Copyright (c) 2011-2013 Phalcon Team (http://www.phalconphp.com) |
+------------------------------------------------------------------------+
| This source file is subject to the New BSD License that is bundled |
| with this package in the file docs/LICENSE.txt. |
| |
| If you did not receive a copy of the license and are unable to |
| obtain it through the world-wide-web, please send an email |
| to [email protected] so we can send you a copy immediately. |
+------------------------------------------------------------------------+
| Authors: Andres Gutierrez <[email protected]> |
| Eduar Carvajal <[email protected]> |
| Vladimir Kolesnikov <[email protected]> |
+------------------------------------------------------------------------+
*/

#ifndef PHALCON_INTERNED_STRINGS_H
#define PHALCON_INTERNED_STRINGS_H

#include "main/php.h"

extern const char *phalcon_interned_alias;
extern const char *phalcon_interned_all;
extern const char *phalcon_interned_arguments;
extern const char *phalcon_interned_balias;
extern const char *phalcon_interned_binary_op;
extern const char *phalcon_interned_column;
extern const char *phalcon_interned_columns;
extern const char *phalcon_interned_conditions;
extern const char *phalcon_interned_delete;
extern const char *phalcon_interned_distinct;
extern const char *phalcon_interned_domain;
extern const char *phalcon_interned_expr;
extern const char *phalcon_interned_fields;
extern const char *phalcon_interned_functionCall;
extern const char *phalcon_interned_group;
extern const char *phalcon_interned_groupBy;
extern const char *phalcon_interned_having;
extern const char *phalcon_interned_joins;
extern const char *phalcon_interned_left;
extern const char *phalcon_interned_limit;
extern const char *phalcon_interned_model;
extern const char *phalcon_interned_models;
extern const char *phalcon_interned_modelsCache;
extern const char *phalcon_interned_modelsManager;
extern const char *phalcon_interned_modelsMetadata;
extern const char *phalcon_interned_name;
extern const char *phalcon_interned_ns_alias;
extern const char *phalcon_interned_number;
extern const char *phalcon_interned_offset;
extern const char *phalcon_interned_op;
extern const char *phalcon_interned_order;
extern const char *phalcon_interned_orderBy;
extern const char *phalcon_interned_qualified;
extern const char *phalcon_interned_qualifiedName;
extern const char *phalcon_interned_right;
extern const char *phalcon_interned_select;
extern const char *phalcon_interned_sort;
extern const char *phalcon_interned_source;
extern const char *phalcon_interned_sqlAlias;
extern const char *phalcon_interned_table;
extern const char *phalcon_interned_tables;
extern const char *phalcon_interned_type;
extern const char *phalcon_interned_update;
extern const char *phalcon_interned_value;
extern const char *phalcon_interned_values;
extern const char *phalcon_interned_where;

void phalcon_init_interned_strings(TSRMLS_D);

#endif /* PHALCON_INTERNED_STRINGS_H */
20 changes: 10 additions & 10 deletions ext/kernel/array.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ int PHALCON_FASTCALL phalcon_array_isset(const zval *arr, zval *index) {
* @note The function is a wrapper around phalcon_array_isset_quick_string()
* @see phalcon_array_isset_quick_string()
*/
int PHALCON_FASTCALL phalcon_array_isset_string(const zval *arr, char *index, uint index_length) {
int PHALCON_FASTCALL phalcon_array_isset_string(const zval *arr, const char *index, uint index_length) {

return phalcon_array_isset_quick_string(arr, index, index_length, zend_inline_hash_func(index, index_length));
}
Expand All @@ -187,7 +187,7 @@ int PHALCON_FASTCALL phalcon_array_isset_string(const zval *arr, char *index, ui
* @retval 0 Not exists or @a arr is not an array
* @retval 1 Exists
*/
int PHALCON_FASTCALL phalcon_array_isset_quick_string(const zval *arr, char *index, uint index_length, unsigned long key) {
int PHALCON_FASTCALL phalcon_array_isset_quick_string(const zval *arr, const char *index, uint index_length, unsigned long key) {

if (likely(Z_TYPE_P(arr) == IS_ARRAY)) {
return zend_hash_quick_exists(Z_ARRVAL_P(arr), index, index_length, key);
Expand Down Expand Up @@ -269,7 +269,7 @@ int PHALCON_FASTCALL phalcon_array_unset(zval **arr, zval *index, int flags) {
* @retval @c FAILURE Failure or @a arr is not an array
* @retval @c SUCCESS Success
*/
int PHALCON_FASTCALL phalcon_array_unset_string(zval **arr, char *index, uint index_length, int flags) {
int PHALCON_FASTCALL phalcon_array_unset_string(zval **arr, const char *index, uint index_length, int flags) {

if (Z_TYPE_PP(arr) != IS_ARRAY) {
return 0;
Expand Down Expand Up @@ -556,7 +556,7 @@ int phalcon_array_update_zval_long(zval **arr, zval *index, long value, int flag
* @arg @c PH_SEPARATE: separate @a arr if its reference count is greater than 1; @c *arr will contain the separated version
* @arg @c PH_COPY: increment the reference count on @c **value
*/
int phalcon_array_update_quick_string(zval **arr, char *index, uint index_length, unsigned long key, zval **value, int flags){
int phalcon_array_update_quick_string(zval **arr, const char *index, uint index_length, unsigned long key, zval **value, int flags){

if (Z_TYPE_PP(arr) != IS_ARRAY) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
Expand Down Expand Up @@ -603,7 +603,7 @@ int phalcon_array_update_quick_string(zval **arr, char *index, uint index_length
* @arg @c PH_SEPARATE: separate @a arr if its reference count is greater than 1; @c *arr will contain the separated version
* @arg @c PH_COPY: increment the reference count on @c **value
*/
int phalcon_array_update_string(zval **arr, char *index, uint index_length, zval **value, int flags) {
int phalcon_array_update_string(zval **arr, const char *index, uint index_length, zval **value, int flags) {

return phalcon_array_update_quick_string(arr, index, index_length + 1, zend_inline_hash_func(index, index_length + 1), value, flags);
}
Expand All @@ -630,7 +630,7 @@ int phalcon_array_update_string(zval **arr, char *index, uint index_length, zval
*
* Only @c PH_SEPARATE is meaningful with this function.
*/
int phalcon_array_update_string_bool(zval **arr, char *index, uint index_length, int value, int flags){
int phalcon_array_update_string_bool(zval **arr, const char *index, uint index_length, int value, int flags){

zval *zvalue;

Expand Down Expand Up @@ -662,7 +662,7 @@ int phalcon_array_update_string_bool(zval **arr, char *index, uint index_length,
*
* Only @c PH_SEPARATE is meaningful with this function.
*/
int phalcon_array_update_string_long(zval **arr, char *index, uint index_length, long value, int flags){
int phalcon_array_update_string_long(zval **arr, const char *index, uint index_length, long value, int flags){

zval *zvalue;

Expand Down Expand Up @@ -695,7 +695,7 @@ int phalcon_array_update_string_long(zval **arr, char *index, uint index_length,
*
* Only @c PH_SEPARATE is meaningful with this function.
*/
int phalcon_array_update_string_string(zval **arr, char *index, uint index_length, char *value, uint value_length, int flags){
int phalcon_array_update_string_string(zval **arr, const char *index, uint index_length, char *value, uint value_length, int flags){

zval *zvalue;

Expand Down Expand Up @@ -931,7 +931,7 @@ int phalcon_array_fetch(zval **return_value, zval *arr, zval *index, int silent)
* @throw @c E_NOTICE if @c index does not exist and @c silent = @c PH_NOISY
* @warning @c *return_value should be either @c NULL (preferred) or point to not initialized memory; if @c *return_value points to a valid variable, mmemory leak is possible
*/
int phalcon_array_fetch_quick_string(zval **return_value, zval *arr, char *index, uint index_length, unsigned long key, int silent){
int phalcon_array_fetch_quick_string(zval **return_value, zval *arr, const char *index, uint index_length, unsigned long key, int silent){

zval **zv;

Expand Down Expand Up @@ -973,7 +973,7 @@ int phalcon_array_fetch_quick_string(zval **return_value, zval *arr, char *index
*
* The function is a wrapper over @c phalcon_array_fetch_quick_string()
*/
int phalcon_array_fetch_string(zval **return_value, zval *arr, char *index, uint index_length, int silent){
int phalcon_array_fetch_string(zval **return_value, zval *arr, const char *index, uint index_length, int silent){

return phalcon_array_fetch_quick_string(return_value, arr, index, index_length + 1, zend_inline_hash_func(index, index_length + 1), silent);
}
Expand Down
Loading

0 comments on commit 2ba3e2f

Please sign in to comment.