Changeset 16396
- Timestamp:
- 05/17/08 12:00:13 (2 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/branch-1-8/src/core/midgard/src/midgard_core_query_builder.c
r16393 r16396 151 151 if(multilang_fallback) { 152 152 153 gchar *ml_str = __get_multilang_select(builder);154 g_string_append_printf(sql, " %s ", ml_str);155 g_free(ml_str);153 //gchar *ml_str = __get_multilang_select(builder); 154 //g_string_append_printf(sql, " %s ", ml_str); 155 //g_free(ml_str); 156 156 } 157 157 … … 163 163 tables = builder->tables; 164 164 165 /* MULTILANG FALLBACK */166 if(multilang_fallback)167 g_string_append_printf(sql,168 ", CASE WHEN lang=%d THEN 1 ELSE 0 END AS midgard_fallback_language ",169 mgd_lang(builder->mgd));170 171 165 g_string_append(sql, " FROM "); 172 166 g_string_append(sql, tables); … … 181 175 MIDGARD_QUERY_CONSTRAINT(builder->stack->data), sql); 182 176 177 /* MULTILANG FALLBACK */ 178 if(multilang_fallback) { 179 180 g_string_append_printf(sql, " AND %s_i.id IN (", builder->schema->table); 181 g_string_append_printf(sql, " SELECT ABS(MIN(i_id)) as i_id FROM (SELECT sid, " 182 "CASE WHEN lang=%d THEN %s_i.id*-1 ELSE %s_i.id END AS i_id FROM " 183 "%s WHERE %s_i.sid = %s.id AND lang IN (%d,%d) ", 184 mgd_get_default_lang(builder->mgd), 185 builder->schema->table, builder->schema->table, 186 tables, builder->schema->table, builder->schema->table, 187 mgd_get_default_lang(builder->mgd), mgd_lang(builder->mgd)); 188 189 if(g_slist_length(builder->stack) > 0) { 190 191 g_string_append(sql, " AND "); 192 midgard_query_constraint_add_sql( 193 MIDGARD_QUERY_CONSTRAINT(builder->stack->data), sql); 194 } 195 196 g_string_append(sql, " ) AS midgard_multilang_fallback_table GROUP BY sid )"); 197 } 198 183 199 if (builder->schema->use_lang == 1) { 184 200 g_string_append(sql, " AND "); … … 188 204 g_string_append(sql, "_i.sid"); 189 205 190 if(!builder->unset_lang) { 206 if(!builder->unset_lang 207 && builder->lang >= 0) { 191 208 192 209 g_string_append(sql, " AND "); 193 210 g_string_append(sql, builder->schema->table); 194 /* Default behaviour , we get multilang records195 * with lang 0 and other lang set, thus we have196 * "full" list of objects , even some of them are197 * not translated yet.*/198 if(builder->lang < 0) {199 g_string_append_printf(sql,200 "_i.lang IN (%d, %d)",201 mgd_get_default_lang(builder->mgd),202 mgd_lang(builder->mgd));203 } else {204 /* builder->lang is set with set_lang method, so205 * we get only those records with lang being set206 * and we ignore all others , even woth lang 0207 */208 211 g_string_append_printf(sql, 209 212 "_i.lang = %d ", 210 builder->lang); 211 } 213 builder->lang); 212 214 } 213 215 } … … 230 232 " %s.metadata_deleted = FALSE", 231 233 builder->schema->table); 232 }233 234 /* MULTILANG FALLBACK */235 if(multilang_fallback) {236 237 /* Unfortunatelly we can not use QB's API and order method :( */238 g_string_append(sql, " ORDER BY midgard_fallback_language DESC ");239 234 } 240 235 … … 249 244 g_string_append(sql, ", "); 250 245 } else { 251 if(!multilang_fallback) 252 g_string_append(sql, " ORDER BY "); 253 else 254 g_string_append(sql, ", "); 255 } 246 g_string_append(sql, " ORDER BY "); 247 } 256 248 MidgardQueryOrder *order = g_array_index( 257 249 builder->orders, MidgardQueryOrder*, i); 258 250 g_string_append(sql, midgard_query_order_get_sql(order)); 259 251 } 260 261 /* MULTILANG FALLBACK */262 if(multilang_fallback)263 g_string_append(sql, " ) AS midgard_multilang_table GROUP BY sid");264 252 265 253 if (mode < MQB_SELECT_COUNT && builder->limit != G_MAXUINT)
