ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/PApp-SQL/SQL.xs
(Generate patch)

Comparing PApp-SQL/SQL.xs (file contents):
Revision 1.12 by root, Thu Apr 11 01:02:10 2002 UTC vs.
Revision 1.13 by root, Wed Jun 26 03:26:39 2002 UTC

21#endif 21#endif
22 return sv; 22 return sv;
23} 23}
24 24
25static SV * 25static SV *
26sql_force_utf8 (SV *sv) 26mortalcopy_and_maybe_force_utf8(int utf8, SV *sv)
27{ 27{
28 sv = sv_mortalcopy (sv);
28#if CAN_UTF8 29#if CAN_UTF8
29 if (SvPOK (sv)) 30 if (utf8 && SvPOK (sv))
30 SvUTF8_on (sv); 31 SvUTF8_on (sv);
31#endif 32#endif
32 return sv; 33 return sv;
33} 34}
34 35
35#define maybe_upgrade_utf8(utf8,sv) ((utf8) ? sql_upgrade_utf8 (sv) : (sv)) 36#define maybe_upgrade_utf8(utf8,sv) ((utf8) ? sql_upgrade_utf8 (sv) : (sv))
36#define maybe_force_utf8(utf8,sv) ((utf8) ? sql_force_utf8 (sv) : (sv))
37 37
38#define is_dbh(sv) ((sv) && sv_isobject (sv) && sv_derived_from ((sv), "DBI::db")) 38#define is_dbh(sv) ((sv) && sv_isobject (sv) && sv_derived_from ((sv), "DBI::db"))
39 39
40typedef struct lru_node { 40typedef struct lru_node {
41 struct lru_node *next; 41 struct lru_node *next;
378 case G_VOID: 378 case G_VOID:
379 /* no thing */ 379 /* no thing */
380 break; 380 break;
381 case G_SCALAR: 381 case G_SCALAR:
382 /* the first element */ 382 /* the first element */
383 XPUSHs (maybe_force_utf8 (ix & 1, *av_fetch ((AV *)SvRV (row), 0, 1))); 383 XPUSHs (mortalcopy_and_maybe_force_utf8 (ix & 1, *av_fetch ((AV *)SvRV (row), 0, 1)));
384 break; 384 break;
385 case G_ARRAY: 385 case G_ARRAY:
386 av = (AV *)SvRV (row); 386 av = (AV *)SvRV (row);
387 count = AvFILL (av) + 1; 387 count = AvFILL (av) + 1;
388 EXTEND (SP, count); 388 EXTEND (SP, count);
389 for (arg = 0; arg < count; arg++) 389 for (arg = 0; arg < count; arg++)
390 PUSHs (maybe_force_utf8 (ix & 1, AvARRAY (av)[arg])); 390 PUSHs (mortalcopy_and_maybe_force_utf8 (ix & 1, AvARRAY (av)[arg]));
391 391
392 break; 392 break;
393 default: 393 default:
394 abort (); 394 abort ();
395 } 395 }
420 int columns = AvFILL ((AV *) SvRV (AvARRAY (av)[0])) + 1; /* columns? */ 420 int columns = AvFILL ((AV *) SvRV (AvARRAY (av)[0])) + 1; /* columns? */
421 421
422 EXTEND (SP, count); 422 EXTEND (SP, count);
423 if (columns == 1) 423 if (columns == 1)
424 for (arg = 0; arg < count; arg++) 424 for (arg = 0; arg < count; arg++)
425 PUSHs (maybe_force_utf8 (ix & 1, AvARRAY ((AV *)SvRV (AvARRAY (av)[arg]))[0])); 425 PUSHs (mortalcopy_and_maybe_force_utf8 (ix & 1, AvARRAY ((AV *)SvRV (AvARRAY (av)[arg]))[0]));
426 else 426 else
427 for (arg = 0; arg < count; arg++) 427 for (arg = 0; arg < count; arg++)
428 PUSHs (maybe_force_utf8 (ix & 1, AvARRAY (av)[arg])); 428 PUSHs (mortalcopy_and_maybe_force_utf8 (ix & 1, AvARRAY (av)[arg]));
429 } 429 }
430 } 430 }
431 } 431 }
432 else 432 else
433 XPUSHs (sth); 433 XPUSHs (sth);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines