859{
860
861
862
863
864
865
866
867
868
869
870
871
872
874 char *query;
875 int tmpint;
876
877
879 {
880
882 {
884
885 sprintf(query, "SELECT count(1), max(ST_zmflag(\"%s\"::geometry)), geometrytype(\"%s\"::geometry) FROM \"%s\".\"%s\" GROUP BY 3",
887 }
888 else
889 {
891
892 sprintf(query, "SELECT count(1), max(ST_zmflag(\"%s\"::geometry)), geometrytype(\"%s\"::geometry) FROM \"%s\" GROUP BY 3",
894 }
895 }
896 else
897 {
898
900 {
902
903 sprintf(query,
"SELECT count(1) FROM \"%s\".\"%s\"", state->
schema, state->
table);
904 }
905 else
906 {
908
909 sprintf(query,
"SELECT count(1) FROM \"%s\"", state->
table);
910 }
911 }
912
913 LWDEBUGF(3,
"Table metadata query: %s\n", query);
914
915 res = PQexec(state->
conn, query);
917
918 if (PQresultStatus(res) != PGRES_TUPLES_OK)
919 {
920 snprintf(state->
message,
SHPDUMPERMSGLEN,
_(
"ERROR: Could not execute table metadata query: %s"), PQresultErrorMessage(res));
921 PQclear(res);
923 }
924
925
926 if (PQntuples(res) == 0)
927 {
929 PQclear(res);
931 }
932
933
935 {
936
937
938
939
940
941
942
943
944
945 int dummy, i;
947 int typefound = 0, typemismatch = 0;
948
950
951 for (i = 0; i < PQntuples(res); i++)
952 {
953
954 if (PQgetisnull(res, i, 2))
955 {
956 state->
rowcount += atoi(PQgetvalue(res, i, 0));
957 continue;
958 }
959
961
962
963 if (!typefound)
965
966 switch (type)
967 {
970 typemismatch = 1;
971 else
973 break;
974
977 typemismatch = 1;
978 else
980 break;
981
984 typemismatch = 1;
985 else
987 break;
988
991 typemismatch = 1;
994 break;
995
998 typemismatch = 1;
1001 break;
1002
1005 typemismatch = 1;
1008 break;
1009 }
1010
1011
1012 state->
rowcount += atoi(PQgetvalue(res, i, 0));
1013
1014
1015
1016
1017 tmpint = atoi(PQgetvalue(res, i, 1));
1018 switch (tmpint)
1019 {
1020 case 0:
1022 break;
1023 case 1:
1025 break;
1026 default:
1028 break;
1029 }
1030
1031 }
1032
1033
1034 if (typemismatch)
1035 {
1037 PQclear(res);
1039 }
1040
1041
1042 switch (typefound)
1043 {
1046 {
1047 case 'z':
1049 break;
1050
1051 case 'm':
1053 break;
1054
1055 default:
1057 }
1058 break;
1059
1062 {
1063 case 'z':
1065 break;
1066
1067 case 'm':
1069 break;
1070
1071 default:
1073 }
1074 break;
1075
1079 {
1080 case 'z':
1082 break;
1083
1084 case 'm':
1086 break;
1087
1088 default:
1090 }
1091 break;
1092
1096 {
1097 case 'z':
1099 break;
1100
1101 case 'm':
1103 break;
1104
1105 default:
1107 }
1108 break;
1109 }
1110 }
1111 else
1112 {
1113
1114 state->
rowcount = atoi(PQgetvalue(res, 0, 0));
1115 }
1116
1117
1118 PQclear(res);
1119
1121}
int lwtype_is_collection(uint8_t type)
Determine whether a type number is a collection or not.
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
int geometry_type_from_string(const char *str, uint8_t *type, int *z, int *m)
Utility function to get type number from string.
#define LWDEBUGF(level, msg,...)
char message[SHPDUMPERMSGLEN]