|
7 | 7 | * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group |
8 | 8 | * Portions Copyright (c) 1994, Regents of the University of California |
9 | 9 | * |
10 | | - * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.45 2007/07/12 21:04:45 tgl Exp $ |
| 10 | + * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.46 2007/07/13 03:43:23 tgl Exp $ |
11 | 11 | * |
12 | 12 | *------------------------------------------------------------------------- |
13 | 13 | */ |
@@ -2673,50 +2673,41 @@ map_sql_typecoll_to_xmlschema_types(List *tupdesc_list) |
2673 | 2673 | List *uniquetypes = NIL; |
2674 | 2674 | int i; |
2675 | 2675 | StringInfoData result; |
2676 | | - ListCell *cell0, *cell1, *cell2; |
| 2676 | + ListCell *cell0; |
2677 | 2677 |
|
2678 | | - foreach (cell0, tupdesc_list) |
| 2678 | + /* extract all column types used in the set of TupleDescs */ |
| 2679 | + foreach(cell0, tupdesc_list) |
2679 | 2680 | { |
2680 | | - TupleDesc tupdesc = lfirst(cell0); |
| 2681 | + TupleDesc tupdesc = (TupleDesc) lfirst(cell0); |
2681 | 2682 |
|
2682 | | - for (i = 1; i <= tupdesc->natts; i++) |
| 2683 | + for (i = 0; i < tupdesc->natts; i++) |
2683 | 2684 | { |
2684 | | - bool already_done = false; |
2685 | | - Oid type = SPI_gettypeid(tupdesc, i); |
2686 | | - foreach (cell1, uniquetypes) |
2687 | | - if (type == lfirst_oid(cell1)) |
2688 | | - { |
2689 | | - already_done = true; |
2690 | | - break; |
2691 | | - } |
2692 | | - if (already_done) |
| 2685 | + if (tupdesc->attrs[i]->attisdropped) |
2693 | 2686 | continue; |
2694 | | - |
2695 | | - uniquetypes = lappend_oid(uniquetypes, type); |
| 2687 | + uniquetypes = list_append_unique_oid(uniquetypes, |
| 2688 | + tupdesc->attrs[i]->atttypid); |
2696 | 2689 | } |
2697 | 2690 | } |
2698 | 2691 |
|
2699 | 2692 | /* add base types of domains */ |
2700 | | - foreach (cell1, uniquetypes) |
| 2693 | + foreach(cell0, uniquetypes) |
2701 | 2694 | { |
2702 | | - bool already_done = false; |
2703 | | - Oid type = getBaseType(lfirst_oid(cell1)); |
2704 | | - foreach (cell2, uniquetypes) |
2705 | | - if (type == lfirst_oid(cell2)) |
2706 | | - { |
2707 | | - already_done = true; |
2708 | | - break; |
2709 | | - } |
2710 | | - if (already_done) |
2711 | | - continue; |
| 2695 | + Oid typid = lfirst_oid(<
ADCA
span class=pl-s1>cell0); |
| 2696 | + Oid basetypid = getBaseType(typid); |
2712 | 2697 |
|
2713 | | - uniquetypes = lappend_oid(uniquetypes, type); |
| 2698 | + if (basetypid != typid) |
| 2699 | + uniquetypes = list_append_unique_oid(uniquetypes, basetypid); |
2714 | 2700 | } |
2715 | 2701 |
|
| 2702 | + /* Convert to textual form */ |
2716 | 2703 | initStringInfo(&result); |
2717 | 2704 |
|
2718 | | - foreach (cell1, uniquetypes) |
2719 | | - appendStringInfo(&result, "%s\n", map_sql_type_to_xmlschema_type(lfirst_oid(cell1), -1)); |
| 2705 | + foreach(cell0, uniquetypes) |
| 2706 | + { |
| 2707 | + appendStringInfo(&result, "%s\n", |
| 2708 | + map_sql_type_to_xmlschema_type(lfirst_oid(cell0), |
| 2709 | + -1)); |
| 2710 | + } |
2720 | 2711 |
|
2721 | 2712 | return result.data; |
2722 | 2713 | } |
|
0 commit comments