|
12 | 12 | | obtain it through the world-wide-web, please send a note to |
|
13 | 13 | | license@php.net so we can mail you a copy immediately. |
|
14 | 14 | +----------------------------------------------------------------------+
|
15 |
| - | Authors: Frank M. Kromann frank@frontbase.com> | |
| 15 | + | Authors: Frank M. Kromann <frank@frontbase.com> | |
16 | 16 | +----------------------------------------------------------------------+
|
17 | 17 | */
|
18 | 18 |
|
@@ -76,6 +76,7 @@ function_entry mssql_functions[] = {
|
76 | 76 | PHP_FE(mssql_init, NULL)
|
77 | 77 | PHP_FE(mssql_bind, a3_arg_force_ref)
|
78 | 78 | PHP_FE(mssql_execute, NULL)
|
| 79 | + PHP_FE(mssql_guid_string, NULL) |
79 | 80 | {NULL, NULL, NULL}
|
80 | 81 | };
|
81 | 82 |
|
@@ -775,7 +776,7 @@ static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int off
|
775 | 776 | result->value.lval = (long) anyintcol(offset);
|
776 | 777 | result->type = IS_LONG;
|
777 | 778 | break;
|
778 |
| - } |
| 779 | + } |
779 | 780 | case SQLCHAR:
|
780 | 781 | case SQLVARCHAR:
|
781 | 782 | case SQLTEXT: {
|
@@ -2125,4 +2126,73 @@ PHP_FUNCTION(mssql_execute)
|
2125 | 2126 | }
|
2126 | 2127 | /* }}} */
|
2127 | 2128 |
|
| 2129 | +/* {{{ proto string mssql_guid_string(string binary [,int short_format]) |
| 2130 | + Converts a 16 byte binary GUID to a string */ |
| 2131 | +PHP_FUNCTION(mssql_guid_string) |
| 2132 | +{ |
| 2133 | + zval **binary, **short_format; |
| 2134 | + int sf = 0; |
| 2135 | + char buffer[32+1]; |
| 2136 | + char buffer2[36+1]; |
| 2137 | + MSSQLLS_FETCH(); |
| 2138 | + |
| 2139 | + switch(ZEND_NUM_ARGS()) { |
| 2140 | + case 1: |
| 2141 | + if (zend_get_parameters_ex(1, &binary)==FAILURE) { |
| 2142 | + RETURN_FALSE; |
| 2143 | + } |
| 2144 | + convert_to_string_ex(binary); |
| 2145 | + break; |
| 2146 | + case 2: |
| 2147 | + if (zend_get_parameters_ex(2, &binary, &short_format)==FAILURE) { |
| 2148 | + RETURN_FALSE; |
| 2149 | + } |
| 2150 | + convert_to_string_ex(binary); |
| 2151 | + convert_to_long_ex(short_format); |
| 2152 | + sf = (*short_format)->value.lval; |
| 2153 | + break; |
| 2154 | + |
| 2155 | + default: |
| 2156 | + WRONG_PARAM_COUNT; |
| 2157 | + break; |
| 2158 | + } |
| 2159 | + |
| 2160 | + dbconvert(NULL, SQLBINARY, (BYTE*)(*binary)->value.str.val, 16, SQLCHAR, buffer, -1); |
| 2161 | + |
| 2162 | + if (sf) { |
| 2163 | + php_strtoupper(buffer, 32); |
| 2164 | + RETURN_STRING(buffer, 1); |
| 2165 | + } |
| 2166 | + else { |
| 2167 | + int i; |
| 2168 | + for (i=0; i<4; i++) { |
| 2169 | + buffer2[2*i] = buffer[6-2*i]; |
| 2170 | + buffer2[2*i+1] = buffer[7-2*i]; |
| 2171 | + } |
| 2172 | + buffer2[8] = '-'; |
| 2173 | + for (i=0; i<2; i++) { |
| 2174 | + buffer2[9+2*i] = buffer[10-2*i]; |
| 2175 | + buffer2[10+2*i] = buffer[11-2*i]; |
| 2176 | + } |
| 2177 | + buffer2[13] = '-'; |
| 2178 | + for (i=0; i<2; i++) { |
| 2179 | + buffer2[14+2*i] = buffer[14-2*i]; |
| 2180 | + buffer2[15+2*i] = buffer[15-2*i]; |
| 2181 | + } |
| 2182 | + buffer2[18] = '-'; |
| 2183 | + for (i=0; i<4; i++) { |
| 2184 | + buffer2[19+i] = buffer[16+i]; |
| 2185 | + } |
| 2186 | + buffer2[23] = '-'; |
| 2187 | + for (i=0; i<12; i++) { |
| 2188 | + buffer2[24+i] = buffer[20+i]; |
| 2189 | + } |
| 2190 | + buffer2[36] = 0; |
| 2191 | + |
| 2192 | + php_strtoupper(buffer2, 36); |
| 2193 | + RETURN_STRING(buffer2, 1); |
| 2194 | + } |
| 2195 | +} |
| 2196 | +/* }}} */ |
| 2197 | + |
2128 | 2198 | #endif
|
0 commit comments