Index: ql/src/test/results/clientpositive/join1_map.q.out =================================================================== --- ql/src/test/results/clientpositive/join1_map.q.out (revision 0) +++ ql/src/test/results/clientpositive/join1_map.q.out (revision 0) @@ -0,0 +1,1104 @@ +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_TABREF src src1) (TOK_TABREF src src2) (= (TOK_COLREF src1 key) (TOK_COLREF src2 key)))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_HINTLIST (TOK_HINT TOK_MAPJOIN (TOK_HINTARGLIST src1))) (TOK_SELEXPR (TOK_ALLCOLREF src1))))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + src2 + Select Operator + expressions: + expr: key + type: string + Map Sink Operator + expressions: + expr: 1 + type: int + expr: 0 + type: string + tag: 1 + dummy: true + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + Local Work: + Map Reduce Local Work + Alias -> Map Local Tables: + src1 + Fetch Operator + limit: -1 + Alias -> Map Local Operator Tree: + src1 + Map Sink Operator + expressions: + expr: 0 + type: int + expr: key + type: string + expr: value + type: string + tag: 0 + dummy: false + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +238 val_238 +238 val_238 +86 val_86 +311 val_311 +311 val_311 +311 val_311 +27 val_27 +165 val_165 +165 val_165 +409 val_409 +409 val_409 +409 val_409 +255 val_255 +255 val_255 +278 val_278 +278 val_278 +98 val_98 +98 val_98 +484 val_484 +265 val_265 +265 val_265 +193 val_193 +193 val_193 +193 val_193 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +150 val_150 +273 val_273 +273 val_273 +273 val_273 +224 val_224 +224 val_224 +369 val_369 +369 val_369 +369 val_369 +66 val_66 +128 val_128 +128 val_128 +128 val_128 +213 val_213 +213 val_213 +146 val_146 +146 val_146 +406 val_406 +406 val_406 +406 val_406 +406 val_406 +429 val_429 +429 val_429 +374 val_374 +152 val_152 +152 val_152 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +145 val_145 +495 val_495 +37 val_37 +37 val_37 +327 val_327 +327 val_327 +327 val_327 +281 val_281 +281 val_281 +277 val_277 +277 val_277 +277 val_277 +277 val_277 +209 val_209 +209 val_209 +15 val_15 +15 val_15 +82 val_82 +403 val_403 +403 val_403 +403 val_403 +166 val_166 +417 val_417 +417 val_417 +417 val_417 +430 val_430 +430 val_430 +430 val_430 +252 val_252 +292 val_292 +219 val_219 +219 val_219 +287 val_287 +153 val_153 +193 val_193 +193 val_193 +193 val_193 +338 val_338 +446 val_446 +459 val_459 +459 val_459 +394 val_394 +237 val_237 +237 val_237 +482 val_482 +174 val_174 +174 val_174 +413 val_413 +413 val_413 +494 val_494 +207 val_207 +207 val_207 +199 val_199 +199 val_199 +199 val_199 +466 val_466 +466 val_466 +466 val_466 +208 val_208 +208 val_208 +208 val_208 +174 val_174 +174 val_174 +399 val_399 +399 val_399 +396 val_396 +396 val_396 +396 val_396 +247 val_247 +417 val_417 +417 val_417 +417 val_417 +489 val_489 +489 val_489 +489 val_489 +489 val_489 +162 val_162 +377 val_377 +397 val_397 +397 val_397 +309 val_309 +309 val_309 +365 val_365 +266 val_266 +439 val_439 +439 val_439 +342 val_342 +342 val_342 +367 val_367 +367 val_367 +325 val_325 +325 val_325 +167 val_167 +167 val_167 +167 val_167 +195 val_195 +195 val_195 +475 val_475 +17 val_17 +113 val_113 +113 val_113 +155 val_155 +203 val_203 +203 val_203 +339 val_339 +0 val_0 +0 val_0 +0 val_0 +455 val_455 +128 val_128 +128 val_128 +128 val_128 +311 val_311 +311 val_311 +311 val_311 +316 val_316 +316 val_316 +316 val_316 +57 val_57 +302 val_302 +205 val_205 +205 val_205 +149 val_149 +149 val_149 +438 val_438 +438 val_438 +438 val_438 +345 val_345 +129 val_129 +129 val_129 +170 val_170 +20 val_20 +489 val_489 +489 val_489 +489 val_489 +489 val_489 +157 val_157 +378 val_378 +221 val_221 +221 val_221 +92 val_92 +111 val_111 +47 val_47 +72 val_72 +72 val_72 +4 val_4 +280 val_280 +280 val_280 +35 val_35 +35 val_35 +35 val_35 +427 val_427 +277 val_277 +277 val_277 +277 val_277 +277 val_277 +208 val_208 +208 val_208 +208 val_208 +356 val_356 +399 val_399 +399 val_399 +169 val_169 +169 val_169 +169 val_169 +169 val_169 +382 val_382 +382 val_382 +498 val_498 +498 val_498 +498 val_498 +125 val_125 +125 val_125 +386 val_386 +437 val_437 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +192 val_192 +286 val_286 +187 val_187 +187 val_187 +187 val_187 +176 val_176 +176 val_176 +54 val_54 +459 val_459 +459 val_459 +51 val_51 +51 val_51 +138 val_138 +138 val_138 +138 val_138 +138 val_138 +103 val_103 +103 val_103 +239 val_239 +239 val_239 +213 val_213 +213 val_213 +216 val_216 +216 val_216 +430 val_430 +430 val_430 +430 val_430 +278 val_278 +278 val_278 +176 val_176 +176 val_176 +289 val_289 +221 val_221 +221 val_221 +65 val_65 +318 val_318 +318 val_318 +318 val_318 +332 val_332 +311 val_311 +311 val_311 +311 val_311 +275 val_275 +137 val_137 +137 val_137 +241 val_241 +83 val_83 +83 val_83 +333 val_333 +333 val_333 +180 val_180 +284 val_284 +12 val_12 +12 val_12 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +181 val_181 +67 val_67 +67 val_67 +260 val_260 +404 val_404 +404 val_404 +384 val_384 +384 val_384 +384 val_384 +489 val_489 +489 val_489 +489 val_489 +489 val_489 +353 val_353 +353 val_353 +373 val_373 +272 val_272 +272 val_272 +138 val_138 +138 val_138 +138 val_138 +138 val_138 +217 val_217 +217 val_217 +84 val_84 +84 val_84 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +466 val_466 +466 val_466 +466 val_466 +58 val_58 +58 val_58 +8 val_8 +411 val_411 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +208 val_208 +208 val_208 +208 val_208 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +24 val_24 +24 val_24 +463 val_463 +463 val_463 +431 val_431 +431 val_431 +431 val_431 +179 val_179 +179 val_179 +172 val_172 +172 val_172 +42 val_42 +42 val_42 +129 val_129 +129 val_129 +158 val_158 +119 val_119 +119 val_119 +119 val_119 +496 val_496 +0 val_0 +0 val_0 +0 val_0 +322 val_322 +322 val_322 +197 val_197 +197 val_197 +468 val_468 +468 val_468 +468 val_468 +468 val_468 +393 val_393 +454 val_454 +454 val_454 +454 val_454 +100 val_100 +100 val_100 +298 val_298 +298 val_298 +298 val_298 +199 val_199 +199 val_199 +199 val_199 +191 val_191 +191 val_191 +418 val_418 +96 val_96 +26 val_26 +26 val_26 +165 val_165 +165 val_165 +327 val_327 +327 val_327 +327 val_327 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +205 val_205 +205 val_205 +120 val_120 +120 val_120 +131 val_131 +51 val_51 +51 val_51 +404 val_404 +404 val_404 +43 val_43 +436 val_436 +156 val_156 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +468 val_468 +468 val_468 +468 val_468 +468 val_468 +308 val_308 +95 val_95 +95 val_95 +196 val_196 +288 val_288 +288 val_288 +481 val_481 +457 val_457 +98 val_98 +98 val_98 +282 val_282 +282 val_282 +197 val_197 +197 val_197 +187 val_187 +187 val_187 +187 val_187 +318 val_318 +318 val_318 +318 val_318 +318 val_318 +318 val_318 +318 val_318 +409 val_409 +409 val_409 +409 val_409 +470 val_470 +137 val_137 +137 val_137 +369 val_369 +369 val_369 +369 val_369 +316 val_316 +316 val_316 +316 val_316 +169 val_169 +169 val_169 +169 val_169 +169 val_169 +413 val_413 +413 val_413 +85 val_85 +77 val_77 +0 val_0 +0 val_0 +0 val_0 +490 val_490 +87 val_87 +364 val_364 +179 val_179 +179 val_179 +118 val_118 +118 val_118 +134 val_134 +134 val_134 +395 val_395 +395 val_395 +282 val_282 +282 val_282 +138 val_138 +138 val_138 +138 val_138 +138 val_138 +238 val_238 +238 val_238 +419 val_419 +15 val_15 +15 val_15 +118 val_118 +118 val_118 +72 val_72 +72 val_72 +90 val_90 +90 val_90 +90 val_90 +307 val_307 +307 val_307 +19 val_19 +435 val_435 +10 val_10 +277 val_277 +277 val_277 +277 val_277 +277 val_277 +273 val_273 +273 val_273 +273 val_273 +306 val_306 +224 val_224 +224 val_224 +309 val_309 +309 val_309 +389 val_389 +327 val_327 +327 val_327 +327 val_327 +242 val_242 +242 val_242 +369 val_369 +369 val_369 +369 val_369 +392 val_392 +272 val_272 +272 val_272 +331 val_331 +331 val_331 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +242 val_242 +242 val_242 +452 val_452 +177 val_177 +226 val_226 +5 val_5 +5 val_5 +5 val_5 +497 val_497 +402 val_402 +396 val_396 +396 val_396 +396 val_396 +317 val_317 +317 val_317 +395 val_395 +395 val_395 +58 val_58 +58 val_58 +35 val_35 +35 val_35 +35 val_35 +336 val_336 +95 val_95 +95 val_95 +11 val_11 +168 val_168 +34 val_34 +229 val_229 +229 val_229 +233 val_233 +233 val_233 +143 val_143 +472 val_472 +322 val_322 +322 val_322 +498 val_498 +498 val_498 +498 val_498 +160 val_160 +195 val_195 +195 val_195 +42 val_42 +42 val_42 +321 val_321 +321 val_321 +430 val_430 +430 val_430 +430 val_430 +119 val_119 +119 val_119 +119 val_119 +489 val_489 +489 val_489 +489 val_489 +489 val_489 +458 val_458 +458 val_458 +78 val_78 +76 val_76 +76 val_76 +41 val_41 +223 val_223 +223 val_223 +492 val_492 +492 val_492 +149 val_149 +149 val_149 +449 val_449 +218 val_218 +228 val_228 +138 val_138 +138 val_138 +138 val_138 +138 val_138 +453 val_453 +30 val_30 +209 val_209 +209 val_209 +64 val_64 +468 val_468 +468 val_468 +468 val_468 +468 val_468 +76 val_76 +76 val_76 +74 val_74 +342 val_342 +342 val_342 +69 val_69 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +33 val_33 +368 val_368 +103 val_103 +103 val_103 +296 val_296 +113 val_113 +113 val_113 +216 val_216 +216 val_216 +367 val_367 +367 val_367 +344 val_344 +344 val_344 +167 val_167 +167 val_167 +167 val_167 +274 val_274 +219 val_219 +219 val_219 +239 val_239 +239 val_239 +485 val_485 +116 val_116 +223 val_223 +223 val_223 +256 val_256 +256 val_256 +263 val_263 +70 val_70 +70 val_70 +70 val_70 +487 val_487 +480 val_480 +480 val_480 +480 val_480 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +288 val_288 +288 val_288 +191 val_191 +191 val_191 +5 val_5 +5 val_5 +5 val_5 +244 val_244 +438 val_438 +438 val_438 +438 val_438 +128 val_128 +128 val_128 +128 val_128 +467 val_467 +432 val_432 +202 val_202 +316 val_316 +316 val_316 +316 val_316 +229 val_229 +229 val_229 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +463 val_463 +463 val_463 +280 val_280 +280 val_280 +2 val_2 +35 val_35 +35 val_35 +35 val_35 +283 val_283 +331 val_331 +331 val_331 +235 val_235 +80 val_80 +44 val_44 +193 val_193 +193 val_193 +193 val_193 +321 val_321 +321 val_321 +335 val_335 +104 val_104 +104 val_104 +466 val_466 +466 val_466 +466 val_466 +366 val_366 +175 val_175 +175 val_175 +403 val_403 +403 val_403 +403 val_403 +483 val_483 +53 val_53 +105 val_105 +257 val_257 +406 val_406 +406 val_406 +406 val_406 +406 val_406 +409 val_409 +409 val_409 +409 val_409 +190 val_190 +406 val_406 +406 val_406 +406 val_406 +406 val_406 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +114 val_114 +258 val_258 +90 val_90 +90 val_90 +90 val_90 +203 val_203 +203 val_203 +262 val_262 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +424 val_424 +424 val_424 +12 val_12 +12 val_12 +396 val_396 +396 val_396 +396 val_396 +201 val_201 +217 val_217 +217 val_217 +164 val_164 +164 val_164 +431 val_431 +431 val_431 +431 val_431 +454 val_454 +454 val_454 +454 val_454 +478 val_478 +478 val_478 +298 val_298 +298 val_298 +298 val_298 +125 val_125 +125 val_125 +431 val_431 +431 val_431 +431 val_431 +164 val_164 +164 val_164 +424 val_424 +424 val_424 +187 val_187 +187 val_187 +187 val_187 +382 val_382 +382 val_382 +5 val_5 +5 val_5 +5 val_5 +70 val_70 +70 val_70 +70 val_70 +397 val_397 +397 val_397 +480 val_480 +480 val_480 +480 val_480 +291 val_291 +24 val_24 +24 val_24 +351 val_351 +255 val_255 +255 val_255 +104 val_104 +104 val_104 +70 val_70 +70 val_70 +70 val_70 +163 val_163 +438 val_438 +438 val_438 +438 val_438 +119 val_119 +119 val_119 +119 val_119 +414 val_414 +414 val_414 +200 val_200 +200 val_200 +491 val_491 +237 val_237 +237 val_237 +439 val_439 +439 val_439 +360 val_360 +248 val_248 +479 val_479 +305 val_305 +417 val_417 +417 val_417 +417 val_417 +199 val_199 +199 val_199 +199 val_199 +444 val_444 +120 val_120 +120 val_120 +429 val_429 +429 val_429 +169 val_169 +169 val_169 +169 val_169 +169 val_169 +443 val_443 +323 val_323 +325 val_325 +325 val_325 +277 val_277 +277 val_277 +277 val_277 +277 val_277 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +478 val_478 +478 val_478 +178 val_178 +468 val_468 +468 val_468 +468 val_468 +468 val_468 +310 val_310 +317 val_317 +317 val_317 +333 val_333 +333 val_333 +493 val_493 +460 val_460 +207 val_207 +207 val_207 +249 val_249 +265 val_265 +265 val_265 +480 val_480 +480 val_480 +480 val_480 +83 val_83 +83 val_83 +136 val_136 +353 val_353 +353 val_353 +172 val_172 +172 val_172 +214 val_214 +462 val_462 +462 val_462 +233 val_233 +233 val_233 +406 val_406 +406 val_406 +406 val_406 +406 val_406 +133 val_133 +175 val_175 +175 val_175 +189 val_189 +454 val_454 +454 val_454 +454 val_454 +375 val_375 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +421 val_421 +407 val_407 +384 val_384 +384 val_384 +384 val_384 +256 val_256 +256 val_256 +26 val_26 +26 val_26 +134 val_134 +134 val_134 +67 val_67 +67 val_67 +384 val_384 +384 val_384 +384 val_384 +379 val_379 +18 val_18 +18 val_18 +462 val_462 +462 val_462 +492 val_492 +492 val_492 +100 val_100 +100 val_100 +298 val_298 +298 val_298 +298 val_298 +9 val_9 +341 val_341 +498 val_498 +498 val_498 +498 val_498 +146 val_146 +146 val_146 +458 val_458 +458 val_458 +362 val_362 +186 val_186 +285 val_285 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +167 val_167 +167 val_167 +167 val_167 +18 val_18 +18 val_18 +273 val_273 +273 val_273 +273 val_273 +183 val_183 +281 val_281 +281 val_281 +344 val_344 +344 val_344 +97 val_97 +97 val_97 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +315 val_315 +84 val_84 +84 val_84 +28 val_28 +37 val_37 +37 val_37 +448 val_448 +152 val_152 +152 val_152 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +307 val_307 +307 val_307 +194 val_194 +414 val_414 +414 val_414 +477 val_477 +222 val_222 +126 val_126 +90 val_90 +90 val_90 +90 val_90 +169 val_169 +169 val_169 +169 val_169 +169 val_169 +403 val_403 +403 val_403 +403 val_403 +400 val_400 +200 val_200 +200 val_200 +97 val_97 +97 val_97 Index: ql/src/test/results/clientpositive/join2_map.q.out =================================================================== --- ql/src/test/results/clientpositive/join2_map.q.out (revision 0) +++ ql/src/test/results/clientpositive/join2_map.q.out (revision 0) @@ -0,0 +1,4212 @@ +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_TABREF srcpart src1) (TOK_TABREF srcpart src2) (= (TOK_COLREF src1 key) (TOK_COLREF src2 key)))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_HINTLIST (TOK_HINT TOK_MAPJOIN (TOK_HINTARGLIST src1))) (TOK_SELEXPR (TOK_ALLCOLREF src1))) (TOK_WHERE (and (= (TOK_COLREF src1 ds) '2008-04-08') (= (TOK_COLREF src2 ds) '2008-04-08'))))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + src2 + Select Operator + expressions: + expr: key + type: string + expr: ds + type: string + Map Sink Operator + expressions: + expr: 1 + type: int + expr: 0 + type: string + expr: 1 + type: string + tag: 1 + dummy: true + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Filter Operator + predicate: + expr: ((2 = '2008-04-08') and (5 = '2008-04-08')) + type: boolean + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + expr: 2 + type: string + expr: 3 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + Local Work: + Map Reduce Local Work + Alias -> Map Local Tables: + src1 + Fetch Operator + limit: -1 + Alias -> Map Local Operator Tree: + src1 + Map Sink Operator + expressions: + expr: 0 + type: int + expr: key + type: string + expr: value + type: string + expr: ds + type: string + expr: hr + type: string + tag: 0 + dummy: false + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Filter Operator + predicate: + expr: ((2 = '2008-04-08') and (5 = '2008-04-08')) + type: boolean + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + expr: 2 + type: string + expr: 3 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +238 val_238 2008-04-08 11 +238 val_238 2008-04-08 11 +238 val_238 2008-04-08 12 +238 val_238 2008-04-08 12 +86 val_86 2008-04-08 11 +86 val_86 2008-04-08 12 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +27 val_27 2008-04-08 11 +27 val_27 2008-04-08 12 +165 val_165 2008-04-08 11 +165 val_165 2008-04-08 11 +165 val_165 2008-04-08 12 +165 val_165 2008-04-08 12 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +255 val_255 2008-04-08 11 +255 val_255 2008-04-08 11 +255 val_255 2008-04-08 12 +255 val_255 2008-04-08 12 +278 val_278 2008-04-08 11 +278 val_278 2008-04-08 11 +278 val_278 2008-04-08 12 +278 val_278 2008-04-08 12 +98 val_98 2008-04-08 11 +98 val_98 2008-04-08 11 +98 val_98 2008-04-08 12 +98 val_98 2008-04-08 12 +484 val_484 2008-04-08 11 +484 val_484 2008-04-08 12 +265 val_265 2008-04-08 11 +265 val_265 2008-04-08 11 +265 val_265 2008-04-08 12 +265 val_265 2008-04-08 12 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +150 val_150 2008-04-08 11 +150 val_150 2008-04-08 12 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +224 val_224 2008-04-08 11 +224 val_224 2008-04-08 11 +224 val_224 2008-04-08 12 +224 val_224 2008-04-08 12 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +66 val_66 2008-04-08 11 +66 val_66 2008-04-08 12 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +213 val_213 2008-04-08 11 +213 val_213 2008-04-08 11 +213 val_213 2008-04-08 12 +213 val_213 2008-04-08 12 +146 val_146 2008-04-08 11 +146 val_146 2008-04-08 11 +146 val_146 2008-04-08 12 +146 val_146 2008-04-08 12 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +429 val_429 2008-04-08 11 +429 val_429 2008-04-08 11 +429 val_429 2008-04-08 12 +429 val_429 2008-04-08 12 +374 val_374 2008-04-08 11 +374 val_374 2008-04-08 12 +152 val_152 2008-04-08 11 +152 val_152 2008-04-08 11 +152 val_152 2008-04-08 12 +152 val_152 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +145 val_145 2008-04-08 11 +145 val_145 2008-04-08 12 +495 val_495 2008-04-08 11 +495 val_495 2008-04-08 12 +37 val_37 2008-04-08 11 +37 val_37 2008-04-08 11 +37 val_37 2008-04-08 12 +37 val_37 2008-04-08 12 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +281 val_281 2008-04-08 11 +281 val_281 2008-04-08 11 +281 val_281 2008-04-08 12 +281 val_281 2008-04-08 12 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +209 val_209 2008-04-08 11 +209 val_209 2008-04-08 11 +209 val_209 2008-04-08 12 +209 val_209 2008-04-08 12 +15 val_15 2008-04-08 11 +15 val_15 2008-04-08 11 +15 val_15 2008-04-08 12 +15 val_15 2008-04-08 12 +82 val_82 2008-04-08 11 +82 val_82 2008-04-08 12 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +166 val_166 2008-04-08 11 +166 val_166 2008-04-08 12 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +252 val_252 2008-04-08 11 +252 val_252 2008-04-08 12 +292 val_292 2008-04-08 11 +292 val_292 2008-04-08 12 +219 val_219 2008-04-08 11 +219 val_219 2008-04-08 11 +219 val_219 2008-04-08 12 +219 val_219 2008-04-08 12 +287 val_287 2008-04-08 11 +287 val_287 2008-04-08 12 +153 val_153 2008-04-08 11 +153 val_153 2008-04-08 12 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +338 val_338 2008-04-08 11 +338 val_338 2008-04-08 12 +446 val_446 2008-04-08 11 +446 val_446 2008-04-08 12 +459 val_459 2008-04-08 11 +459 val_459 2008-04-08 11 +459 val_459 2008-04-08 12 +459 val_459 2008-04-08 12 +394 val_394 2008-04-08 11 +394 val_394 2008-04-08 12 +237 val_237 2008-04-08 11 +237 val_237 2008-04-08 11 +237 val_237 2008-04-08 12 +237 val_237 2008-04-08 12 +482 val_482 2008-04-08 11 +482 val_482 2008-04-08 12 +174 val_174 2008-04-08 11 +174 val_174 2008-04-08 11 +174 val_174 2008-04-08 12 +174 val_174 2008-04-08 12 +413 val_413 2008-04-08 11 +413 val_413 2008-04-08 11 +413 val_413 2008-04-08 12 +413 val_413 2008-04-08 12 +494 val_494 2008-04-08 11 +494 val_494 2008-04-08 12 +207 val_207 2008-04-08 11 +207 val_207 2008-04-08 11 +207 val_207 2008-04-08 12 +207 val_207 2008-04-08 12 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +174 val_174 2008-04-08 11 +174 val_174 2008-04-08 11 +174 val_174 2008-04-08 12 +174 val_174 2008-04-08 12 +399 val_399 2008-04-08 11 +399 val_399 2008-04-08 11 +399 val_399 2008-04-08 12 +399 val_399 2008-04-08 12 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +247 val_247 2008-04-08 11 +247 val_247 2008-04-08 12 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +162 val_162 2008-04-08 11 +162 val_162 2008-04-08 12 +377 val_377 2008-04-08 11 +377 val_377 2008-04-08 12 +397 val_397 2008-04-08 11 +397 val_397 2008-04-08 11 +397 val_397 2008-04-08 12 +397 val_397 2008-04-08 12 +309 val_309 2008-04-08 11 +309 val_309 2008-04-08 11 +309 val_309 2008-04-08 12 +309 val_309 2008-04-08 12 +365 val_365 2008-04-08 11 +365 val_365 2008-04-08 12 +266 val_266 2008-04-08 11 +266 val_266 2008-04-08 12 +439 val_439 2008-04-08 11 +439 val_439 2008-04-08 11 +439 val_439 2008-04-08 12 +439 val_439 2008-04-08 12 +342 val_342 2008-04-08 11 +342 val_342 2008-04-08 11 +342 val_342 2008-04-08 12 +342 val_342 2008-04-08 12 +367 val_367 2008-04-08 11 +367 val_367 2008-04-08 11 +367 val_367 2008-04-08 12 +367 val_367 2008-04-08 12 +325 val_325 2008-04-08 11 +325 val_325 2008-04-08 11 +325 val_325 2008-04-08 12 +325 val_325 2008-04-08 12 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +195 val_195 2008-04-08 11 +195 val_195 2008-04-08 11 +195 val_195 2008-04-08 12 +195 val_195 2008-04-08 12 +475 val_475 2008-04-08 11 +475 val_475 2008-04-08 12 +17 val_17 2008-04-08 11 +17 val_17 2008-04-08 12 +113 val_113 2008-04-08 11 +113 val_113 2008-04-08 11 +113 val_113 2008-04-08 12 +113 val_113 2008-04-08 12 +155 val_155 2008-04-08 11 +155 val_155 2008-04-08 12 +203 val_203 2008-04-08 11 +203 val_203 2008-04-08 11 +203 val_203 2008-04-08 12 +203 val_203 2008-04-08 12 +339 val_339 2008-04-08 11 +339 val_339 2008-04-08 12 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +455 val_455 2008-04-08 11 +455 val_455 2008-04-08 12 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +57 val_57 2008-04-08 11 +57 val_57 2008-04-08 12 +302 val_302 2008-04-08 11 +302 val_302 2008-04-08 12 +205 val_205 2008-04-08 11 +205 val_205 2008-04-08 11 +205 val_205 2008-04-08 12 +205 val_205 2008-04-08 12 +149 val_149 2008-04-08 11 +149 val_149 2008-04-08 11 +149 val_149 2008-04-08 12 +149 val_149 2008-04-08 12 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +345 val_345 2008-04-08 11 +345 val_345 2008-04-08 12 +129 val_129 2008-04-08 11 +129 val_129 2008-04-08 11 +129 val_129 2008-04-08 12 +129 val_129 2008-04-08 12 +170 val_170 2008-04-08 11 +170 val_170 2008-04-08 12 +20 val_20 2008-04-08 11 +20 val_20 2008-04-08 12 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +157 val_157 2008-04-08 11 +157 val_157 2008-04-08 12 +378 val_378 2008-04-08 11 +378 val_378 2008-04-08 12 +221 val_221 2008-04-08 11 +221 val_221 2008-04-08 11 +221 val_221 2008-04-08 12 +221 val_221 2008-04-08 12 +92 val_92 2008-04-08 11 +92 val_92 2008-04-08 12 +111 val_111 2008-04-08 11 +111 val_111 2008-04-08 12 +47 val_47 2008-04-08 11 +47 val_47 2008-04-08 12 +72 val_72 2008-04-08 11 +72 val_72 2008-04-08 11 +72 val_72 2008-04-08 12 +72 val_72 2008-04-08 12 +4 val_4 2008-04-08 11 +4 val_4 2008-04-08 12 +280 val_280 2008-04-08 11 +280 val_280 2008-04-08 11 +280 val_280 2008-04-08 12 +280 val_280 2008-04-08 12 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +427 val_427 2008-04-08 11 +427 val_427 2008-04-08 12 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +356 val_356 2008-04-08 11 +356 val_356 2008-04-08 12 +399 val_399 2008-04-08 11 +399 val_399 2008-04-08 11 +399 val_399 2008-04-08 12 +399 val_399 2008-04-08 12 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +382 val_382 2008-04-08 11 +382 val_382 2008-04-08 11 +382 val_382 2008-04-08 12 +382 val_382 2008-04-08 12 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +125 val_125 2008-04-08 11 +125 val_125 2008-04-08 11 +125 val_125 2008-04-08 12 +125 val_125 2008-04-08 12 +386 val_386 2008-04-08 11 +386 val_386 2008-04-08 12 +437 val_437 2008-04-08 11 +437 val_437 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +192 val_192 2008-04-08 11 +192 val_192 2008-04-08 12 +286 val_286 2008-04-08 11 +286 val_286 2008-04-08 12 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +176 val_176 2008-04-08 11 +176 val_176 2008-04-08 11 +176 val_176 2008-04-08 12 +176 val_176 2008-04-08 12 +54 val_54 2008-04-08 11 +54 val_54 2008-04-08 12 +459 val_459 2008-04-08 11 +459 val_459 2008-04-08 11 +459 val_459 2008-04-08 12 +459 val_459 2008-04-08 12 +51 val_51 2008-04-08 11 +51 val_51 2008-04-08 11 +51 val_51 2008-04-08 12 +51 val_51 2008-04-08 12 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +103 val_103 2008-04-08 11 +103 val_103 2008-04-08 11 +103 val_103 2008-04-08 12 +103 val_103 2008-04-08 12 +239 val_239 2008-04-08 11 +239 val_239 2008-04-08 11 +239 val_239 2008-04-08 12 +239 val_239 2008-04-08 12 +213 val_213 2008-04-08 11 +213 val_213 2008-04-08 11 +213 val_213 2008-04-08 12 +213 val_213 2008-04-08 12 +216 val_216 2008-04-08 11 +216 val_216 2008-04-08 11 +216 val_216 2008-04-08 12 +216 val_216 2008-04-08 12 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +278 val_278 2008-04-08 11 +278 val_278 2008-04-08 11 +278 val_278 2008-04-08 12 +278 val_278 2008-04-08 12 +176 val_176 2008-04-08 11 +176 val_176 2008-04-08 11 +176 val_176 2008-04-08 12 +176 val_176 2008-04-08 12 +289 val_289 2008-04-08 11 +289 val_289 2008-04-08 12 +221 val_221 2008-04-08 11 +221 val_221 2008-04-08 11 +221 val_221 2008-04-08 12 +221 val_221 2008-04-08 12 +65 val_65 2008-04-08 11 +65 val_65 2008-04-08 12 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +332 val_332 2008-04-08 11 +332 val_332 2008-04-08 12 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +275 val_275 2008-04-08 11 +275 val_275 2008-04-08 12 +137 val_137 2008-04-08 11 +137 val_137 2008-04-08 11 +137 val_137 2008-04-08 12 +137 val_137 2008-04-08 12 +241 val_241 2008-04-08 11 +241 val_241 2008-04-08 12 +83 val_83 2008-04-08 11 +83 val_83 2008-04-08 11 +83 val_83 2008-04-08 12 +83 val_83 2008-04-08 12 +333 val_333 2008-04-08 11 +333 val_333 2008-04-08 11 +333 val_333 2008-04-08 12 +333 val_333 2008-04-08 12 +180 val_180 2008-04-08 11 +180 val_180 2008-04-08 12 +284 val_284 2008-04-08 11 +284 val_284 2008-04-08 12 +12 val_12 2008-04-08 11 +12 val_12 2008-04-08 11 +12 val_12 2008-04-08 12 +12 val_12 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +181 val_181 2008-04-08 11 +181 val_181 2008-04-08 12 +67 val_67 2008-04-08 11 +67 val_67 2008-04-08 11 +67 val_67 2008-04-08 12 +67 val_67 2008-04-08 12 +260 val_260 2008-04-08 11 +260 val_260 2008-04-08 12 +404 val_404 2008-04-08 11 +404 val_404 2008-04-08 11 +404 val_404 2008-04-08 12 +404 val_404 2008-04-08 12 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +353 val_353 2008-04-08 11 +353 val_353 2008-04-08 11 +353 val_353 2008-04-08 12 +353 val_353 2008-04-08 12 +373 val_373 2008-04-08 11 +373 val_373 2008-04-08 12 +272 val_272 2008-04-08 11 +272 val_272 2008-04-08 11 +272 val_272 2008-04-08 12 +272 val_272 2008-04-08 12 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +217 val_217 2008-04-08 11 +217 val_217 2008-04-08 11 +217 val_217 2008-04-08 12 +217 val_217 2008-04-08 12 +84 val_84 2008-04-08 11 +84 val_84 2008-04-08 11 +84 val_84 2008-04-08 12 +84 val_84 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +58 val_58 2008-04-08 11 +58 val_58 2008-04-08 11 +58 val_58 2008-04-08 12 +58 val_58 2008-04-08 12 +8 val_8 2008-04-08 11 +8 val_8 2008-04-08 12 +411 val_411 2008-04-08 11 +411 val_411 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +24 val_24 2008-04-08 11 +24 val_24 2008-04-08 11 +24 val_24 2008-04-08 12 +24 val_24 2008-04-08 12 +463 val_463 2008-04-08 11 +463 val_463 2008-04-08 11 +463 val_463 2008-04-08 12 +463 val_463 2008-04-08 12 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +179 val_179 2008-04-08 11 +179 val_179 2008-04-08 11 +179 val_179 2008-04-08 12 +179 val_179 2008-04-08 12 +172 val_172 2008-04-08 11 +172 val_172 2008-04-08 11 +172 val_172 2008-04-08 12 +172 val_172 2008-04-08 12 +42 val_42 2008-04-08 11 +42 val_42 2008-04-08 11 +42 val_42 2008-04-08 12 +42 val_42 2008-04-08 12 +129 val_129 2008-04-08 11 +129 val_129 2008-04-08 11 +129 val_129 2008-04-08 12 +129 val_129 2008-04-08 12 +158 val_158 2008-04-08 11 +158 val_158 2008-04-08 12 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +496 val_496 2008-04-08 11 +496 val_496 2008-04-08 12 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +322 val_322 2008-04-08 11 +322 val_322 2008-04-08 11 +322 val_322 2008-04-08 12 +322 val_322 2008-04-08 12 +197 val_197 2008-04-08 11 +197 val_197 2008-04-08 11 +197 val_197 2008-04-08 12 +197 val_197 2008-04-08 12 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +393 val_393 2008-04-08 11 +393 val_393 2008-04-08 12 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +100 val_100 2008-04-08 11 +100 val_100 2008-04-08 11 +100 val_100 2008-04-08 12 +100 val_100 2008-04-08 12 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +191 val_191 2008-04-08 11 +191 val_191 2008-04-08 11 +191 val_191 2008-04-08 12 +191 val_191 2008-04-08 12 +418 val_418 2008-04-08 11 +418 val_418 2008-04-08 12 +96 val_96 2008-04-08 11 +96 val_96 2008-04-08 12 +26 val_26 2008-04-08 11 +26 val_26 2008-04-08 11 +26 val_26 2008-04-08 12 +26 val_26 2008-04-08 12 +165 val_165 2008-04-08 11 +165 val_165 2008-04-08 11 +165 val_165 2008-04-08 12 +165 val_165 2008-04-08 12 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +205 val_205 2008-04-08 11 +205 val_205 2008-04-08 11 +205 val_205 2008-04-08 12 +205 val_205 2008-04-08 12 +120 val_120 2008-04-08 11 +120 val_120 2008-04-08 11 +120 val_120 2008-04-08 12 +120 val_120 2008-04-08 12 +131 val_131 2008-04-08 11 +131 val_131 2008-04-08 12 +51 val_51 2008-04-08 11 +51 val_51 2008-04-08 11 +51 val_51 2008-04-08 12 +51 val_51 2008-04-08 12 +404 val_404 2008-04-08 11 +404 val_404 2008-04-08 11 +404 val_404 2008-04-08 12 +404 val_404 2008-04-08 12 +43 val_43 2008-04-08 11 +43 val_43 2008-04-08 12 +436 val_436 2008-04-08 11 +436 val_436 2008-04-08 12 +156 val_156 2008-04-08 11 +156 val_156 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +308 val_308 2008-04-08 11 +308 val_308 2008-04-08 12 +95 val_95 2008-04-08 11 +95 val_95 2008-04-08 11 +95 val_95 2008-04-08 12 +95 val_95 2008-04-08 12 +196 val_196 2008-04-08 11 +196 val_196 2008-04-08 12 +288 val_288 2008-04-08 11 +288 val_288 2008-04-08 11 +288 val_288 2008-04-08 12 +288 val_288 2008-04-08 12 +481 val_481 2008-04-08 11 +481 val_481 2008-04-08 12 +457 val_457 2008-04-08 11 +457 val_457 2008-04-08 12 +98 val_98 2008-04-08 11 +98 val_98 2008-04-08 11 +98 val_98 2008-04-08 12 +98 val_98 2008-04-08 12 +282 val_282 2008-04-08 11 +282 val_282 2008-04-08 11 +282 val_282 2008-04-08 12 +282 val_282 2008-04-08 12 +197 val_197 2008-04-08 11 +197 val_197 2008-04-08 11 +197 val_197 2008-04-08 12 +197 val_197 2008-04-08 12 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +470 val_470 2008-04-08 11 +470 val_470 2008-04-08 12 +137 val_137 2008-04-08 11 +137 val_137 2008-04-08 11 +137 val_137 2008-04-08 12 +137 val_137 2008-04-08 12 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +413 val_413 2008-04-08 11 +413 val_413 2008-04-08 11 +413 val_413 2008-04-08 12 +413 val_413 2008-04-08 12 +85 val_85 2008-04-08 11 +85 val_85 2008-04-08 12 +77 val_77 2008-04-08 11 +77 val_77 2008-04-08 12 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +490 val_490 2008-04-08 11 +490 val_490 2008-04-08 12 +87 val_87 2008-04-08 11 +87 val_87 2008-04-08 12 +364 val_364 2008-04-08 11 +364 val_364 2008-04-08 12 +179 val_179 2008-04-08 11 +179 val_179 2008-04-08 11 +179 val_179 2008-04-08 12 +179 val_179 2008-04-08 12 +118 val_118 2008-04-08 11 +118 val_118 2008-04-08 11 +118 val_118 2008-04-08 12 +118 val_118 2008-04-08 12 +134 val_134 2008-04-08 11 +134 val_134 2008-04-08 11 +134 val_134 2008-04-08 12 +134 val_134 2008-04-08 12 +395 val_395 2008-04-08 11 +395 val_395 2008-04-08 11 +395 val_395 2008-04-08 12 +395 val_395 2008-04-08 12 +282 val_282 2008-04-08 11 +282 val_282 2008-04-08 11 +282 val_282 2008-04-08 12 +282 val_282 2008-04-08 12 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +238 val_238 2008-04-08 11 +238 val_238 2008-04-08 11 +238 val_238 2008-04-08 12 +238 val_238 2008-04-08 12 +419 val_419 2008-04-08 11 +419 val_419 2008-04-08 12 +15 val_15 2008-04-08 11 +15 val_15 2008-04-08 11 +15 val_15 2008-04-08 12 +15 val_15 2008-04-08 12 +118 val_118 2008-04-08 11 +118 val_118 2008-04-08 11 +118 val_118 2008-04-08 12 +118 val_118 2008-04-08 12 +72 val_72 2008-04-08 11 +72 val_72 2008-04-08 11 +72 val_72 2008-04-08 12 +72 val_72 2008-04-08 12 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +307 val_307 2008-04-08 11 +307 val_307 2008-04-08 11 +307 val_307 2008-04-08 12 +307 val_307 2008-04-08 12 +19 val_19 2008-04-08 11 +19 val_19 2008-04-08 12 +435 val_435 2008-04-08 11 +435 val_435 2008-04-08 12 +10 val_10 2008-04-08 11 +10 val_10 2008-04-08 12 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +306 val_306 2008-04-08 11 +306 val_306 2008-04-08 12 +224 val_224 2008-04-08 11 +224 val_224 2008-04-08 11 +224 val_224 2008-04-08 12 +224 val_224 2008-04-08 12 +309 val_309 2008-04-08 11 +309 val_309 2008-04-08 11 +309 val_309 2008-04-08 12 +309 val_309 2008-04-08 12 +389 val_389 2008-04-08 11 +389 val_389 2008-04-08 12 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +242 val_242 2008-04-08 11 +242 val_242 2008-04-08 11 +242 val_242 2008-04-08 12 +242 val_242 2008-04-08 12 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +392 val_392 2008-04-08 11 +392 val_392 2008-04-08 12 +272 val_272 2008-04-08 11 +272 val_272 2008-04-08 11 +272 val_272 2008-04-08 12 +272 val_272 2008-04-08 12 +331 val_331 2008-04-08 11 +331 val_331 2008-04-08 11 +331 val_331 2008-04-08 12 +331 val_331 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +242 val_242 2008-04-08 11 +242 val_242 2008-04-08 11 +242 val_242 2008-04-08 12 +242 val_242 2008-04-08 12 +452 val_452 2008-04-08 11 +452 val_452 2008-04-08 12 +177 val_177 2008-04-08 11 +177 val_177 2008-04-08 12 +226 val_226 2008-04-08 11 +226 val_226 2008-04-08 12 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +497 val_497 2008-04-08 11 +497 val_497 2008-04-08 12 +402 val_402 2008-04-08 11 +402 val_402 2008-04-08 12 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +317 val_317 2008-04-08 11 +317 val_317 2008-04-08 11 +317 val_317 2008-04-08 12 +317 val_317 2008-04-08 12 +395 val_395 2008-04-08 11 +395 val_395 2008-04-08 11 +395 val_395 2008-04-08 12 +395 val_395 2008-04-08 12 +58 val_58 2008-04-08 11 +58 val_58 2008-04-08 11 +58 val_58 2008-04-08 12 +58 val_58 2008-04-08 12 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +336 val_336 2008-04-08 11 +336 val_336 2008-04-08 12 +95 val_95 2008-04-08 11 +95 val_95 2008-04-08 11 +95 val_95 2008-04-08 12 +95 val_95 2008-04-08 12 +11 val_11 2008-04-08 11 +11 val_11 2008-04-08 12 +168 val_168 2008-04-08 11 +168 val_168 2008-04-08 12 +34 val_34 2008-04-08 11 +34 val_34 2008-04-08 12 +229 val_229 2008-04-08 11 +229 val_229 2008-04-08 11 +229 val_229 2008-04-08 12 +229 val_229 2008-04-08 12 +233 val_233 2008-04-08 11 +233 val_233 2008-04-08 11 +233 val_233 2008-04-08 12 +233 val_233 2008-04-08 12 +143 val_143 2008-04-08 11 +143 val_143 2008-04-08 12 +472 val_472 2008-04-08 11 +472 val_472 2008-04-08 12 +322 val_322 2008-04-08 11 +322 val_322 2008-04-08 11 +322 val_322 2008-04-08 12 +322 val_322 2008-04-08 12 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +160 val_160 2008-04-08 11 +160 val_160 2008-04-08 12 +195 val_195 2008-04-08 11 +195 val_195 2008-04-08 11 +195 val_195 2008-04-08 12 +195 val_195 2008-04-08 12 +42 val_42 2008-04-08 11 +42 val_42 2008-04-08 11 +42 val_42 2008-04-08 12 +42 val_42 2008-04-08 12 +321 val_321 2008-04-08 11 +321 val_321 2008-04-08 11 +321 val_321 2008-04-08 12 +321 val_321 2008-04-08 12 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +458 val_458 2008-04-08 11 +458 val_458 2008-04-08 11 +458 val_458 2008-04-08 12 +458 val_458 2008-04-08 12 +78 val_78 2008-04-08 11 +78 val_78 2008-04-08 12 +76 val_76 2008-04-08 11 +76 val_76 2008-04-08 11 +76 val_76 2008-04-08 12 +76 val_76 2008-04-08 12 +41 val_41 2008-04-08 11 +41 val_41 2008-04-08 12 +223 val_223 2008-04-08 11 +223 val_223 2008-04-08 11 +223 val_223 2008-04-08 12 +223 val_223 2008-04-08 12 +492 val_492 2008-04-08 11 +492 val_492 2008-04-08 11 +492 val_492 2008-04-08 12 +492 val_492 2008-04-08 12 +149 val_149 2008-04-08 11 +149 val_149 2008-04-08 11 +149 val_149 2008-04-08 12 +149 val_149 2008-04-08 12 +449 val_449 2008-04-08 11 +449 val_449 2008-04-08 12 +218 val_218 2008-04-08 11 +218 val_218 2008-04-08 12 +228 val_228 2008-04-08 11 +228 val_228 2008-04-08 12 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +453 val_453 2008-04-08 11 +453 val_453 2008-04-08 12 +30 val_30 2008-04-08 11 +30 val_30 2008-04-08 12 +209 val_209 2008-04-08 11 +209 val_209 2008-04-08 11 +209 val_209 2008-04-08 12 +209 val_209 2008-04-08 12 +64 val_64 2008-04-08 11 +64 val_64 2008-04-08 12 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +76 val_76 2008-04-08 11 +76 val_76 2008-04-08 11 +76 val_76 2008-04-08 12 +76 val_76 2008-04-08 12 +74 val_74 2008-04-08 11 +74 val_74 2008-04-08 12 +342 val_342 2008-04-08 11 +342 val_342 2008-04-08 11 +342 val_342 2008-04-08 12 +342 val_342 2008-04-08 12 +69 val_69 2008-04-08 11 +69 val_69 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +33 val_33 2008-04-08 11 +33 val_33 2008-04-08 12 +368 val_368 2008-04-08 11 +368 val_368 2008-04-08 12 +103 val_103 2008-04-08 11 +103 val_103 2008-04-08 11 +103 val_103 2008-04-08 12 +103 val_103 2008-04-08 12 +296 val_296 2008-04-08 11 +296 val_296 2008-04-08 12 +113 val_113 2008-04-08 11 +113 val_113 2008-04-08 11 +113 val_113 2008-04-08 12 +113 val_113 2008-04-08 12 +216 val_216 2008-04-08 11 +216 val_216 2008-04-08 11 +216 val_216 2008-04-08 12 +216 val_216 2008-04-08 12 +367 val_367 2008-04-08 11 +367 val_367 2008-04-08 11 +367 val_367 2008-04-08 12 +367 val_367 2008-04-08 12 +344 val_344 2008-04-08 11 +344 val_344 2008-04-08 11 +344 val_344 2008-04-08 12 +344 val_344 2008-04-08 12 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +274 val_274 2008-04-08 11 +274 val_274 2008-04-08 12 +219 val_219 2008-04-08 11 +219 val_219 2008-04-08 11 +219 val_219 2008-04-08 12 +219 val_219 2008-04-08 12 +239 val_239 2008-04-08 11 +239 val_239 2008-04-08 11 +239 val_239 2008-04-08 12 +239 val_239 2008-04-08 12 +485 val_485 2008-04-08 11 +485 val_485 2008-04-08 12 +116 val_116 2008-04-08 11 +116 val_116 2008-04-08 12 +223 val_223 2008-04-08 11 +223 val_223 2008-04-08 11 +223 val_223 2008-04-08 12 +223 val_223 2008-04-08 12 +256 val_256 2008-04-08 11 +256 val_256 2008-04-08 11 +256 val_256 2008-04-08 12 +256 val_256 2008-04-08 12 +263 val_263 2008-04-08 11 +263 val_263 2008-04-08 12 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +487 val_487 2008-04-08 11 +487 val_487 2008-04-08 12 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +288 val_288 2008-04-08 11 +288 val_288 2008-04-08 11 +288 val_288 2008-04-08 12 +288 val_288 2008-04-08 12 +191 val_191 2008-04-08 11 +191 val_191 2008-04-08 11 +191 val_191 2008-04-08 12 +191 val_191 2008-04-08 12 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +244 val_244 2008-04-08 11 +244 val_244 2008-04-08 12 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +467 val_467 2008-04-08 11 +467 val_467 2008-04-08 12 +432 val_432 2008-04-08 11 +432 val_432 2008-04-08 12 +202 val_202 2008-04-08 11 +202 val_202 2008-04-08 12 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +229 val_229 2008-04-08 11 +229 val_229 2008-04-08 11 +229 val_229 2008-04-08 12 +229 val_229 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +463 val_463 2008-04-08 11 +463 val_463 2008-04-08 11 +463 val_463 2008-04-08 12 +463 val_463 2008-04-08 12 +280 val_280 2008-04-08 11 +280 val_280 2008-04-08 11 +280 val_280 2008-04-08 12 +280 val_280 2008-04-08 12 +2 val_2 2008-04-08 11 +2 val_2 2008-04-08 12 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +283 val_283 2008-04-08 11 +283 val_283 2008-04-08 12 +331 val_331 2008-04-08 11 +331 val_331 2008-04-08 11 +331 val_331 2008-04-08 12 +331 val_331 2008-04-08 12 +235 val_235 2008-04-08 11 +235 val_235 2008-04-08 12 +80 val_80 2008-04-08 11 +80 val_80 2008-04-08 12 +44 val_44 2008-04-08 11 +44 val_44 2008-04-08 12 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +321 val_321 2008-04-08 11 +321 val_321 2008-04-08 11 +321 val_321 2008-04-08 12 +321 val_321 2008-04-08 12 +335 val_335 2008-04-08 11 +335 val_335 2008-04-08 12 +104 val_104 2008-04-08 11 +104 val_104 2008-04-08 11 +104 val_104 2008-04-08 12 +104 val_104 2008-04-08 12 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +366 val_366 2008-04-08 11 +366 val_366 2008-04-08 12 +175 val_175 2008-04-08 11 +175 val_175 2008-04-08 11 +175 val_175 2008-04-08 12 +175 val_175 2008-04-08 12 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +483 val_483 2008-04-08 11 +483 val_483 2008-04-08 12 +53 val_53 2008-04-08 11 +53 val_53 2008-04-08 12 +105 val_105 2008-04-08 11 +105 val_105 2008-04-08 12 +257 val_257 2008-04-08 11 +257 val_257 2008-04-08 12 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +190 val_190 2008-04-08 11 +190 val_190 2008-04-08 12 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +114 val_114 2008-04-08 11 +114 val_114 2008-04-08 12 +258 val_258 2008-04-08 11 +258 val_258 2008-04-08 12 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +203 val_203 2008-04-08 11 +203 val_203 2008-04-08 11 +203 val_203 2008-04-08 12 +203 val_203 2008-04-08 12 +262 val_262 2008-04-08 11 +262 val_262 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +424 val_424 2008-04-08 11 +424 val_424 2008-04-08 11 +424 val_424 2008-04-08 12 +424 val_424 2008-04-08 12 +12 val_12 2008-04-08 11 +12 val_12 2008-04-08 11 +12 val_12 2008-04-08 12 +12 val_12 2008-04-08 12 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +201 val_201 2008-04-08 11 +201 val_201 2008-04-08 12 +217 val_217 2008-04-08 11 +217 val_217 2008-04-08 11 +217 val_217 2008-04-08 12 +217 val_217 2008-04-08 12 +164 val_164 2008-04-08 11 +164 val_164 2008-04-08 11 +164 val_164 2008-04-08 12 +164 val_164 2008-04-08 12 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +478 val_478 2008-04-08 11 +478 val_478 2008-04-08 11 +478 val_478 2008-04-08 12 +478 val_478 2008-04-08 12 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +125 val_125 2008-04-08 11 +125 val_125 2008-04-08 11 +125 val_125 2008-04-08 12 +125 val_125 2008-04-08 12 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +164 val_164 2008-04-08 11 +164 val_164 2008-04-08 11 +164 val_164 2008-04-08 12 +164 val_164 2008-04-08 12 +424 val_424 2008-04-08 11 +424 val_424 2008-04-08 11 +424 val_424 2008-04-08 12 +424 val_424 2008-04-08 12 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +382 val_382 2008-04-08 11 +382 val_382 2008-04-08 11 +382 val_382 2008-04-08 12 +382 val_382 2008-04-08 12 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +397 val_397 2008-04-08 11 +397 val_397 2008-04-08 11 +397 val_397 2008-04-08 12 +397 val_397 2008-04-08 12 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +291 val_291 2008-04-08 11 +291 val_291 2008-04-08 12 +24 val_24 2008-04-08 11 +24 val_24 2008-04-08 11 +24 val_24 2008-04-08 12 +24 val_24 2008-04-08 12 +351 val_351 2008-04-08 11 +351 val_351 2008-04-08 12 +255 val_255 2008-04-08 11 +255 val_255 2008-04-08 11 +255 val_255 2008-04-08 12 +255 val_255 2008-04-08 12 +104 val_104 2008-04-08 11 +104 val_104 2008-04-08 11 +104 val_104 2008-04-08 12 +104 val_104 2008-04-08 12 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +163 val_163 2008-04-08 11 +163 val_163 2008-04-08 12 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +414 val_414 2008-04-08 11 +414 val_414 2008-04-08 11 +414 val_414 2008-04-08 12 +414 val_414 2008-04-08 12 +200 val_200 2008-04-08 11 +200 val_200 2008-04-08 11 +200 val_200 2008-04-08 12 +200 val_200 2008-04-08 12 +491 val_491 2008-04-08 11 +491 val_491 2008-04-08 12 +237 val_237 2008-04-08 11 +237 val_237 2008-04-08 11 +237 val_237 2008-04-08 12 +237 val_237 2008-04-08 12 +439 val_439 2008-04-08 11 +439 val_439 2008-04-08 11 +439 val_439 2008-04-08 12 +439 val_439 2008-04-08 12 +360 val_360 2008-04-08 11 +360 val_360 2008-04-08 12 +248 val_248 2008-04-08 11 +248 val_248 2008-04-08 12 +479 val_479 2008-04-08 11 +479 val_479 2008-04-08 12 +305 val_305 2008-04-08 11 +305 val_305 2008-04-08 12 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +444 val_444 2008-04-08 11 +444 val_444 2008-04-08 12 +120 val_120 2008-04-08 11 +120 val_120 2008-04-08 11 +120 val_120 2008-04-08 12 +120 val_120 2008-04-08 12 +429 val_429 2008-04-08 11 +429 val_429 2008-04-08 11 +429 val_429 2008-04-08 12 +429 val_429 2008-04-08 12 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +443 val_443 2008-04-08 11 +443 val_443 2008-04-08 12 +323 val_323 2008-04-08 11 +323 val_323 2008-04-08 12 +325 val_325 2008-04-08 11 +325 val_325 2008-04-08 11 +325 val_325 2008-04-08 12 +325 val_325 2008-04-08 12 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +478 val_478 2008-04-08 11 +478 val_478 2008-04-08 11 +478 val_478 2008-04-08 12 +478 val_478 2008-04-08 12 +178 val_178 2008-04-08 11 +178 val_178 2008-04-08 12 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +310 val_310 2008-04-08 11 +310 val_310 2008-04-08 12 +317 val_317 2008-04-08 11 +317 val_317 2008-04-08 11 +317 val_317 2008-04-08 12 +317 val_317 2008-04-08 12 +333 val_333 2008-04-08 11 +333 val_333 2008-04-08 11 +333 val_333 2008-04-08 12 +333 val_333 2008-04-08 12 +493 val_493 2008-04-08 11 +493 val_493 2008-04-08 12 +460 val_460 2008-04-08 11 +460 val_460 2008-04-08 12 +207 val_207 2008-04-08 11 +207 val_207 2008-04-08 11 +207 val_207 2008-04-08 12 +207 val_207 2008-04-08 12 +249 val_249 2008-04-08 11 +249 val_249 2008-04-08 12 +265 val_265 2008-04-08 11 +265 val_265 2008-04-08 11 +265 val_265 2008-04-08 12 +265 val_265 2008-04-08 12 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +83 val_83 2008-04-08 11 +83 val_83 2008-04-08 11 +83 val_83 2008-04-08 12 +83 val_83 2008-04-08 12 +136 val_136 2008-04-08 11 +136 val_136 2008-04-08 12 +353 val_353 2008-04-08 11 +353 val_353 2008-04-08 11 +353 val_353 2008-04-08 12 +353 val_353 2008-04-08 12 +172 val_172 2008-04-08 11 +172 val_172 2008-04-08 11 +172 val_172 2008-04-08 12 +172 val_172 2008-04-08 12 +214 val_214 2008-04-08 11 +214 val_214 2008-04-08 12 +462 val_462 2008-04-08 11 +462 val_462 2008-04-08 11 +462 val_462 2008-04-08 12 +462 val_462 2008-04-08 12 +233 val_233 2008-04-08 11 +233 val_233 2008-04-08 11 +233 val_233 2008-04-08 12 +233 val_233 2008-04-08 12 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +133 val_133 2008-04-08 11 +133 val_133 2008-04-08 12 +175 val_175 2008-04-08 11 +175 val_175 2008-04-08 11 +175 val_175 2008-04-08 12 +175 val_175 2008-04-08 12 +189 val_189 2008-04-08 11 +189 val_189 2008-04-08 12 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +375 val_375 2008-04-08 11 +375 val_375 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +421 val_421 2008-04-08 11 +421 val_421 2008-04-08 12 +407 val_407 2008-04-08 11 +407 val_407 2008-04-08 12 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +256 val_256 2008-04-08 11 +256 val_256 2008-04-08 11 +256 val_256 2008-04-08 12 +256 val_256 2008-04-08 12 +26 val_26 2008-04-08 11 +26 val_26 2008-04-08 11 +26 val_26 2008-04-08 12 +26 val_26 2008-04-08 12 +134 val_134 2008-04-08 11 +134 val_134 2008-04-08 11 +134 val_134 2008-04-08 12 +134 val_134 2008-04-08 12 +67 val_67 2008-04-08 11 +67 val_67 2008-04-08 11 +67 val_67 2008-04-08 12 +67 val_67 2008-04-08 12 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +379 val_379 2008-04-08 11 +379 val_379 2008-04-08 12 +18 val_18 2008-04-08 11 +18 val_18 2008-04-08 11 +18 val_18 2008-04-08 12 +18 val_18 2008-04-08 12 +462 val_462 2008-04-08 11 +462 val_462 2008-04-08 11 +462 val_462 2008-04-08 12 +462 val_462 2008-04-08 12 +492 val_492 2008-04-08 11 +492 val_492 2008-04-08 11 +492 val_492 2008-04-08 12 +492 val_492 2008-04-08 12 +100 val_100 2008-04-08 11 +100 val_100 2008-04-08 11 +100 val_100 2008-04-08 12 +100 val_100 2008-04-08 12 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +9 val_9 2008-04-08 11 +9 val_9 2008-04-08 12 +341 val_341 2008-04-08 11 +341 val_341 2008-04-08 12 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +146 val_146 2008-04-08 11 +146 val_146 2008-04-08 11 +146 val_146 2008-04-08 12 +146 val_146 2008-04-08 12 +458 val_458 2008-04-08 11 +458 val_458 2008-04-08 11 +458 val_458 2008-04-08 12 +458 val_458 2008-04-08 12 +362 val_362 2008-04-08 11 +362 val_362 2008-04-08 12 +186 val_186 2008-04-08 11 +186 val_186 2008-04-08 12 +285 val_285 2008-04-08 11 +285 val_285 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +18 val_18 2008-04-08 11 +18 val_18 2008-04-08 11 +18 val_18 2008-04-08 12 +18 val_18 2008-04-08 12 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +183 val_183 2008-04-08 11 +183 val_183 2008-04-08 12 +281 val_281 2008-04-08 11 +281 val_281 2008-04-08 11 +281 val_281 2008-04-08 12 +281 val_281 2008-04-08 12 +344 val_344 2008-04-08 11 +344 val_344 2008-04-08 11 +344 val_344 2008-04-08 12 +344 val_344 2008-04-08 12 +97 val_97 2008-04-08 11 +97 val_97 2008-04-08 11 +97 val_97 2008-04-08 12 +97 val_97 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +315 val_315 2008-04-08 11 +315 val_315 2008-04-08 12 +84 val_84 2008-04-08 11 +84 val_84 2008-04-08 11 +84 val_84 2008-04-08 12 +84 val_84 2008-04-08 12 +28 val_28 2008-04-08 11 +28 val_28 2008-04-08 12 +37 val_37 2008-04-08 11 +37 val_37 2008-04-08 11 +37 val_37 2008-04-08 12 +37 val_37 2008-04-08 12 +448 val_448 2008-04-08 11 +448 val_448 2008-04-08 12 +152 val_152 2008-04-08 11 +152 val_152 2008-04-08 11 +152 val_152 2008-04-08 12 +152 val_152 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +307 val_307 2008-04-08 11 +307 val_307 2008-04-08 11 +307 val_307 2008-04-08 12 +307 val_307 2008-04-08 12 +194 val_194 2008-04-08 11 +194 val_194 2008-04-08 12 +414 val_414 2008-04-08 11 +414 val_414 2008-04-08 11 +414 val_414 2008-04-08 12 +414 val_414 2008-04-08 12 +477 val_477 2008-04-08 11 +477 val_477 2008-04-08 12 +222 val_222 2008-04-08 11 +222 val_222 2008-04-08 12 +126 val_126 2008-04-08 11 +126 val_126 2008-04-08 12 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +400 val_400 2008-04-08 11 +400 val_400 2008-04-08 12 +200 val_200 2008-04-08 11 +200 val_200 2008-04-08 11 +200 val_200 2008-04-08 12 +200 val_200 2008-04-08 12 +97 val_97 2008-04-08 11 +97 val_97 2008-04-08 11 +97 val_97 2008-04-08 12 +97 val_97 2008-04-08 12 +238 val_238 2008-04-08 11 +238 val_238 2008-04-08 11 +238 val_238 2008-04-08 12 +238 val_238 2008-04-08 12 +86 val_86 2008-04-08 11 +86 val_86 2008-04-08 12 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +27 val_27 2008-04-08 11 +27 val_27 2008-04-08 12 +165 val_165 2008-04-08 11 +165 val_165 2008-04-08 11 +165 val_165 2008-04-08 12 +165 val_165 2008-04-08 12 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +255 val_255 2008-04-08 11 +255 val_255 2008-04-08 11 +255 val_255 2008-04-08 12 +255 val_255 2008-04-08 12 +278 val_278 2008-04-08 11 +278 val_278 2008-04-08 11 +278 val_278 2008-04-08 12 +278 val_278 2008-04-08 12 +98 val_98 2008-04-08 11 +98 val_98 2008-04-08 11 +98 val_98 2008-04-08 12 +98 val_98 2008-04-08 12 +484 val_484 2008-04-08 11 +484 val_484 2008-04-08 12 +265 val_265 2008-04-08 11 +265 val_265 2008-04-08 11 +265 val_265 2008-04-08 12 +265 val_265 2008-04-08 12 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +150 val_150 2008-04-08 11 +150 val_150 2008-04-08 12 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +224 val_224 2008-04-08 11 +224 val_224 2008-04-08 11 +224 val_224 2008-04-08 12 +224 val_224 2008-04-08 12 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +66 val_66 2008-04-08 11 +66 val_66 2008-04-08 12 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +213 val_213 2008-04-08 11 +213 val_213 2008-04-08 11 +213 val_213 2008-04-08 12 +213 val_213 2008-04-08 12 +146 val_146 2008-04-08 11 +146 val_146 2008-04-08 11 +146 val_146 2008-04-08 12 +146 val_146 2008-04-08 12 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +429 val_429 2008-04-08 11 +429 val_429 2008-04-08 11 +429 val_429 2008-04-08 12 +429 val_429 2008-04-08 12 +374 val_374 2008-04-08 11 +374 val_374 2008-04-08 12 +152 val_152 2008-04-08 11 +152 val_152 2008-04-08 11 +152 val_152 2008-04-08 12 +152 val_152 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +145 val_145 2008-04-08 11 +145 val_145 2008-04-08 12 +495 val_495 2008-04-08 11 +495 val_495 2008-04-08 12 +37 val_37 2008-04-08 11 +37 val_37 2008-04-08 11 +37 val_37 2008-04-08 12 +37 val_37 2008-04-08 12 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +281 val_281 2008-04-08 11 +281 val_281 2008-04-08 11 +281 val_281 2008-04-08 12 +281 val_281 2008-04-08 12 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +209 val_209 2008-04-08 11 +209 val_209 2008-04-08 11 +209 val_209 2008-04-08 12 +209 val_209 2008-04-08 12 +15 val_15 2008-04-08 11 +15 val_15 2008-04-08 11 +15 val_15 2008-04-08 12 +15 val_15 2008-04-08 12 +82 val_82 2008-04-08 11 +82 val_82 2008-04-08 12 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +166 val_166 2008-04-08 11 +166 val_166 2008-04-08 12 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +252 val_252 2008-04-08 11 +252 val_252 2008-04-08 12 +292 val_292 2008-04-08 11 +292 val_292 2008-04-08 12 +219 val_219 2008-04-08 11 +219 val_219 2008-04-08 11 +219 val_219 2008-04-08 12 +219 val_219 2008-04-08 12 +287 val_287 2008-04-08 11 +287 val_287 2008-04-08 12 +153 val_153 2008-04-08 11 +153 val_153 2008-04-08 12 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +338 val_338 2008-04-08 11 +338 val_338 2008-04-08 12 +446 val_446 2008-04-08 11 +446 val_446 2008-04-08 12 +459 val_459 2008-04-08 11 +459 val_459 2008-04-08 11 +459 val_459 2008-04-08 12 +459 val_459 2008-04-08 12 +394 val_394 2008-04-08 11 +394 val_394 2008-04-08 12 +237 val_237 2008-04-08 11 +237 val_237 2008-04-08 11 +237 val_237 2008-04-08 12 +237 val_237 2008-04-08 12 +482 val_482 2008-04-08 11 +482 val_482 2008-04-08 12 +174 val_174 2008-04-08 11 +174 val_174 2008-04-08 11 +174 val_174 2008-04-08 12 +174 val_174 2008-04-08 12 +413 val_413 2008-04-08 11 +413 val_413 2008-04-08 11 +413 val_413 2008-04-08 12 +413 val_413 2008-04-08 12 +494 val_494 2008-04-08 11 +494 val_494 2008-04-08 12 +207 val_207 2008-04-08 11 +207 val_207 2008-04-08 11 +207 val_207 2008-04-08 12 +207 val_207 2008-04-08 12 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +174 val_174 2008-04-08 11 +174 val_174 2008-04-08 11 +174 val_174 2008-04-08 12 +174 val_174 2008-04-08 12 +399 val_399 2008-04-08 11 +399 val_399 2008-04-08 11 +399 val_399 2008-04-08 12 +399 val_399 2008-04-08 12 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +247 val_247 2008-04-08 11 +247 val_247 2008-04-08 12 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +162 val_162 2008-04-08 11 +162 val_162 2008-04-08 12 +377 val_377 2008-04-08 11 +377 val_377 2008-04-08 12 +397 val_397 2008-04-08 11 +397 val_397 2008-04-08 11 +397 val_397 2008-04-08 12 +397 val_397 2008-04-08 12 +309 val_309 2008-04-08 11 +309 val_309 2008-04-08 11 +309 val_309 2008-04-08 12 +309 val_309 2008-04-08 12 +365 val_365 2008-04-08 11 +365 val_365 2008-04-08 12 +266 val_266 2008-04-08 11 +266 val_266 2008-04-08 12 +439 val_439 2008-04-08 11 +439 val_439 2008-04-08 11 +439 val_439 2008-04-08 12 +439 val_439 2008-04-08 12 +342 val_342 2008-04-08 11 +342 val_342 2008-04-08 11 +342 val_342 2008-04-08 12 +342 val_342 2008-04-08 12 +367 val_367 2008-04-08 11 +367 val_367 2008-04-08 11 +367 val_367 2008-04-08 12 +367 val_367 2008-04-08 12 +325 val_325 2008-04-08 11 +325 val_325 2008-04-08 11 +325 val_325 2008-04-08 12 +325 val_325 2008-04-08 12 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +195 val_195 2008-04-08 11 +195 val_195 2008-04-08 11 +195 val_195 2008-04-08 12 +195 val_195 2008-04-08 12 +475 val_475 2008-04-08 11 +475 val_475 2008-04-08 12 +17 val_17 2008-04-08 11 +17 val_17 2008-04-08 12 +113 val_113 2008-04-08 11 +113 val_113 2008-04-08 11 +113 val_113 2008-04-08 12 +113 val_113 2008-04-08 12 +155 val_155 2008-04-08 11 +155 val_155 2008-04-08 12 +203 val_203 2008-04-08 11 +203 val_203 2008-04-08 11 +203 val_203 2008-04-08 12 +203 val_203 2008-04-08 12 +339 val_339 2008-04-08 11 +339 val_339 2008-04-08 12 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +455 val_455 2008-04-08 11 +455 val_455 2008-04-08 12 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +57 val_57 2008-04-08 11 +57 val_57 2008-04-08 12 +302 val_302 2008-04-08 11 +302 val_302 2008-04-08 12 +205 val_205 2008-04-08 11 +205 val_205 2008-04-08 11 +205 val_205 2008-04-08 12 +205 val_205 2008-04-08 12 +149 val_149 2008-04-08 11 +149 val_149 2008-04-08 11 +149 val_149 2008-04-08 12 +149 val_149 2008-04-08 12 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +345 val_345 2008-04-08 11 +345 val_345 2008-04-08 12 +129 val_129 2008-04-08 11 +129 val_129 2008-04-08 11 +129 val_129 2008-04-08 12 +129 val_129 2008-04-08 12 +170 val_170 2008-04-08 11 +170 val_170 2008-04-08 12 +20 val_20 2008-04-08 11 +20 val_20 2008-04-08 12 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +157 val_157 2008-04-08 11 +157 val_157 2008-04-08 12 +378 val_378 2008-04-08 11 +378 val_378 2008-04-08 12 +221 val_221 2008-04-08 11 +221 val_221 2008-04-08 11 +221 val_221 2008-04-08 12 +221 val_221 2008-04-08 12 +92 val_92 2008-04-08 11 +92 val_92 2008-04-08 12 +111 val_111 2008-04-08 11 +111 val_111 2008-04-08 12 +47 val_47 2008-04-08 11 +47 val_47 2008-04-08 12 +72 val_72 2008-04-08 11 +72 val_72 2008-04-08 11 +72 val_72 2008-04-08 12 +72 val_72 2008-04-08 12 +4 val_4 2008-04-08 11 +4 val_4 2008-04-08 12 +280 val_280 2008-04-08 11 +280 val_280 2008-04-08 11 +280 val_280 2008-04-08 12 +280 val_280 2008-04-08 12 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +427 val_427 2008-04-08 11 +427 val_427 2008-04-08 12 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +356 val_356 2008-04-08 11 +356 val_356 2008-04-08 12 +399 val_399 2008-04-08 11 +399 val_399 2008-04-08 11 +399 val_399 2008-04-08 12 +399 val_399 2008-04-08 12 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +382 val_382 2008-04-08 11 +382 val_382 2008-04-08 11 +382 val_382 2008-04-08 12 +382 val_382 2008-04-08 12 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +125 val_125 2008-04-08 11 +125 val_125 2008-04-08 11 +125 val_125 2008-04-08 12 +125 val_125 2008-04-08 12 +386 val_386 2008-04-08 11 +386 val_386 2008-04-08 12 +437 val_437 2008-04-08 11 +437 val_437 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +192 val_192 2008-04-08 11 +192 val_192 2008-04-08 12 +286 val_286 2008-04-08 11 +286 val_286 2008-04-08 12 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +176 val_176 2008-04-08 11 +176 val_176 2008-04-08 11 +176 val_176 2008-04-08 12 +176 val_176 2008-04-08 12 +54 val_54 2008-04-08 11 +54 val_54 2008-04-08 12 +459 val_459 2008-04-08 11 +459 val_459 2008-04-08 11 +459 val_459 2008-04-08 12 +459 val_459 2008-04-08 12 +51 val_51 2008-04-08 11 +51 val_51 2008-04-08 11 +51 val_51 2008-04-08 12 +51 val_51 2008-04-08 12 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +103 val_103 2008-04-08 11 +103 val_103 2008-04-08 11 +103 val_103 2008-04-08 12 +103 val_103 2008-04-08 12 +239 val_239 2008-04-08 11 +239 val_239 2008-04-08 11 +239 val_239 2008-04-08 12 +239 val_239 2008-04-08 12 +213 val_213 2008-04-08 11 +213 val_213 2008-04-08 11 +213 val_213 2008-04-08 12 +213 val_213 2008-04-08 12 +216 val_216 2008-04-08 11 +216 val_216 2008-04-08 11 +216 val_216 2008-04-08 12 +216 val_216 2008-04-08 12 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +278 val_278 2008-04-08 11 +278 val_278 2008-04-08 11 +278 val_278 2008-04-08 12 +278 val_278 2008-04-08 12 +176 val_176 2008-04-08 11 +176 val_176 2008-04-08 11 +176 val_176 2008-04-08 12 +176 val_176 2008-04-08 12 +289 val_289 2008-04-08 11 +289 val_289 2008-04-08 12 +221 val_221 2008-04-08 11 +221 val_221 2008-04-08 11 +221 val_221 2008-04-08 12 +221 val_221 2008-04-08 12 +65 val_65 2008-04-08 11 +65 val_65 2008-04-08 12 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +332 val_332 2008-04-08 11 +332 val_332 2008-04-08 12 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 11 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +311 val_311 2008-04-08 12 +275 val_275 2008-04-08 11 +275 val_275 2008-04-08 12 +137 val_137 2008-04-08 11 +137 val_137 2008-04-08 11 +137 val_137 2008-04-08 12 +137 val_137 2008-04-08 12 +241 val_241 2008-04-08 11 +241 val_241 2008-04-08 12 +83 val_83 2008-04-08 11 +83 val_83 2008-04-08 11 +83 val_83 2008-04-08 12 +83 val_83 2008-04-08 12 +333 val_333 2008-04-08 11 +333 val_333 2008-04-08 11 +333 val_333 2008-04-08 12 +333 val_333 2008-04-08 12 +180 val_180 2008-04-08 11 +180 val_180 2008-04-08 12 +284 val_284 2008-04-08 11 +284 val_284 2008-04-08 12 +12 val_12 2008-04-08 11 +12 val_12 2008-04-08 11 +12 val_12 2008-04-08 12 +12 val_12 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +181 val_181 2008-04-08 11 +181 val_181 2008-04-08 12 +67 val_67 2008-04-08 11 +67 val_67 2008-04-08 11 +67 val_67 2008-04-08 12 +67 val_67 2008-04-08 12 +260 val_260 2008-04-08 11 +260 val_260 2008-04-08 12 +404 val_404 2008-04-08 11 +404 val_404 2008-04-08 11 +404 val_404 2008-04-08 12 +404 val_404 2008-04-08 12 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +353 val_353 2008-04-08 11 +353 val_353 2008-04-08 11 +353 val_353 2008-04-08 12 +353 val_353 2008-04-08 12 +373 val_373 2008-04-08 11 +373 val_373 2008-04-08 12 +272 val_272 2008-04-08 11 +272 val_272 2008-04-08 11 +272 val_272 2008-04-08 12 +272 val_272 2008-04-08 12 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +217 val_217 2008-04-08 11 +217 val_217 2008-04-08 11 +217 val_217 2008-04-08 12 +217 val_217 2008-04-08 12 +84 val_84 2008-04-08 11 +84 val_84 2008-04-08 11 +84 val_84 2008-04-08 12 +84 val_84 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +58 val_58 2008-04-08 11 +58 val_58 2008-04-08 11 +58 val_58 2008-04-08 12 +58 val_58 2008-04-08 12 +8 val_8 2008-04-08 11 +8 val_8 2008-04-08 12 +411 val_411 2008-04-08 11 +411 val_411 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 11 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +208 val_208 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +24 val_24 2008-04-08 11 +24 val_24 2008-04-08 11 +24 val_24 2008-04-08 12 +24 val_24 2008-04-08 12 +463 val_463 2008-04-08 11 +463 val_463 2008-04-08 11 +463 val_463 2008-04-08 12 +463 val_463 2008-04-08 12 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +179 val_179 2008-04-08 11 +179 val_179 2008-04-08 11 +179 val_179 2008-04-08 12 +179 val_179 2008-04-08 12 +172 val_172 2008-04-08 11 +172 val_172 2008-04-08 11 +172 val_172 2008-04-08 12 +172 val_172 2008-04-08 12 +42 val_42 2008-04-08 11 +42 val_42 2008-04-08 11 +42 val_42 2008-04-08 12 +42 val_42 2008-04-08 12 +129 val_129 2008-04-08 11 +129 val_129 2008-04-08 11 +129 val_129 2008-04-08 12 +129 val_129 2008-04-08 12 +158 val_158 2008-04-08 11 +158 val_158 2008-04-08 12 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +496 val_496 2008-04-08 11 +496 val_496 2008-04-08 12 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +322 val_322 2008-04-08 11 +322 val_322 2008-04-08 11 +322 val_322 2008-04-08 12 +322 val_322 2008-04-08 12 +197 val_197 2008-04-08 11 +197 val_197 2008-04-08 11 +197 val_197 2008-04-08 12 +197 val_197 2008-04-08 12 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +393 val_393 2008-04-08 11 +393 val_393 2008-04-08 12 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +100 val_100 2008-04-08 11 +100 val_100 2008-04-08 11 +100 val_100 2008-04-08 12 +100 val_100 2008-04-08 12 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +191 val_191 2008-04-08 11 +191 val_191 2008-04-08 11 +191 val_191 2008-04-08 12 +191 val_191 2008-04-08 12 +418 val_418 2008-04-08 11 +418 val_418 2008-04-08 12 +96 val_96 2008-04-08 11 +96 val_96 2008-04-08 12 +26 val_26 2008-04-08 11 +26 val_26 2008-04-08 11 +26 val_26 2008-04-08 12 +26 val_26 2008-04-08 12 +165 val_165 2008-04-08 11 +165 val_165 2008-04-08 11 +165 val_165 2008-04-08 12 +165 val_165 2008-04-08 12 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +205 val_205 2008-04-08 11 +205 val_205 2008-04-08 11 +205 val_205 2008-04-08 12 +205 val_205 2008-04-08 12 +120 val_120 2008-04-08 11 +120 val_120 2008-04-08 11 +120 val_120 2008-04-08 12 +120 val_120 2008-04-08 12 +131 val_131 2008-04-08 11 +131 val_131 2008-04-08 12 +51 val_51 2008-04-08 11 +51 val_51 2008-04-08 11 +51 val_51 2008-04-08 12 +51 val_51 2008-04-08 12 +404 val_404 2008-04-08 11 +404 val_404 2008-04-08 11 +404 val_404 2008-04-08 12 +404 val_404 2008-04-08 12 +43 val_43 2008-04-08 11 +43 val_43 2008-04-08 12 +436 val_436 2008-04-08 11 +436 val_436 2008-04-08 12 +156 val_156 2008-04-08 11 +156 val_156 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +308 val_308 2008-04-08 11 +308 val_308 2008-04-08 12 +95 val_95 2008-04-08 11 +95 val_95 2008-04-08 11 +95 val_95 2008-04-08 12 +95 val_95 2008-04-08 12 +196 val_196 2008-04-08 11 +196 val_196 2008-04-08 12 +288 val_288 2008-04-08 11 +288 val_288 2008-04-08 11 +288 val_288 2008-04-08 12 +288 val_288 2008-04-08 12 +481 val_481 2008-04-08 11 +481 val_481 2008-04-08 12 +457 val_457 2008-04-08 11 +457 val_457 2008-04-08 12 +98 val_98 2008-04-08 11 +98 val_98 2008-04-08 11 +98 val_98 2008-04-08 12 +98 val_98 2008-04-08 12 +282 val_282 2008-04-08 11 +282 val_282 2008-04-08 11 +282 val_282 2008-04-08 12 +282 val_282 2008-04-08 12 +197 val_197 2008-04-08 11 +197 val_197 2008-04-08 11 +197 val_197 2008-04-08 12 +197 val_197 2008-04-08 12 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 11 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +318 val_318 2008-04-08 12 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +470 val_470 2008-04-08 11 +470 val_470 2008-04-08 12 +137 val_137 2008-04-08 11 +137 val_137 2008-04-08 11 +137 val_137 2008-04-08 12 +137 val_137 2008-04-08 12 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +413 val_413 2008-04-08 11 +413 val_413 2008-04-08 11 +413 val_413 2008-04-08 12 +413 val_413 2008-04-08 12 +85 val_85 2008-04-08 11 +85 val_85 2008-04-08 12 +77 val_77 2008-04-08 11 +77 val_77 2008-04-08 12 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 11 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +0 val_0 2008-04-08 12 +490 val_490 2008-04-08 11 +490 val_490 2008-04-08 12 +87 val_87 2008-04-08 11 +87 val_87 2008-04-08 12 +364 val_364 2008-04-08 11 +364 val_364 2008-04-08 12 +179 val_179 2008-04-08 11 +179 val_179 2008-04-08 11 +179 val_179 2008-04-08 12 +179 val_179 2008-04-08 12 +118 val_118 2008-04-08 11 +118 val_118 2008-04-08 11 +118 val_118 2008-04-08 12 +118 val_118 2008-04-08 12 +134 val_134 2008-04-08 11 +134 val_134 2008-04-08 11 +134 val_134 2008-04-08 12 +134 val_134 2008-04-08 12 +395 val_395 2008-04-08 11 +395 val_395 2008-04-08 11 +395 val_395 2008-04-08 12 +395 val_395 2008-04-08 12 +282 val_282 2008-04-08 11 +282 val_282 2008-04-08 11 +282 val_282 2008-04-08 12 +282 val_282 2008-04-08 12 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +238 val_238 2008-04-08 11 +238 val_238 2008-04-08 11 +238 val_238 2008-04-08 12 +238 val_238 2008-04-08 12 +419 val_419 2008-04-08 11 +419 val_419 2008-04-08 12 +15 val_15 2008-04-08 11 +15 val_15 2008-04-08 11 +15 val_15 2008-04-08 12 +15 val_15 2008-04-08 12 +118 val_118 2008-04-08 11 +118 val_118 2008-04-08 11 +118 val_118 2008-04-08 12 +118 val_118 2008-04-08 12 +72 val_72 2008-04-08 11 +72 val_72 2008-04-08 11 +72 val_72 2008-04-08 12 +72 val_72 2008-04-08 12 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +307 val_307 2008-04-08 11 +307 val_307 2008-04-08 11 +307 val_307 2008-04-08 12 +307 val_307 2008-04-08 12 +19 val_19 2008-04-08 11 +19 val_19 2008-04-08 12 +435 val_435 2008-04-08 11 +435 val_435 2008-04-08 12 +10 val_10 2008-04-08 11 +10 val_10 2008-04-08 12 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +306 val_306 2008-04-08 11 +306 val_306 2008-04-08 12 +224 val_224 2008-04-08 11 +224 val_224 2008-04-08 11 +224 val_224 2008-04-08 12 +224 val_224 2008-04-08 12 +309 val_309 2008-04-08 11 +309 val_309 2008-04-08 11 +309 val_309 2008-04-08 12 +309 val_309 2008-04-08 12 +389 val_389 2008-04-08 11 +389 val_389 2008-04-08 12 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 11 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +327 val_327 2008-04-08 12 +242 val_242 2008-04-08 11 +242 val_242 2008-04-08 11 +242 val_242 2008-04-08 12 +242 val_242 2008-04-08 12 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 11 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +369 val_369 2008-04-08 12 +392 val_392 2008-04-08 11 +392 val_392 2008-04-08 12 +272 val_272 2008-04-08 11 +272 val_272 2008-04-08 11 +272 val_272 2008-04-08 12 +272 val_272 2008-04-08 12 +331 val_331 2008-04-08 11 +331 val_331 2008-04-08 11 +331 val_331 2008-04-08 12 +331 val_331 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +242 val_242 2008-04-08 11 +242 val_242 2008-04-08 11 +242 val_242 2008-04-08 12 +242 val_242 2008-04-08 12 +452 val_452 2008-04-08 11 +452 val_452 2008-04-08 12 +177 val_177 2008-04-08 11 +177 val_177 2008-04-08 12 +226 val_226 2008-04-08 11 +226 val_226 2008-04-08 12 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +497 val_497 2008-04-08 11 +497 val_497 2008-04-08 12 +402 val_402 2008-04-08 11 +402 val_402 2008-04-08 12 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +317 val_317 2008-04-08 11 +317 val_317 2008-04-08 11 +317 val_317 2008-04-08 12 +317 val_317 2008-04-08 12 +395 val_395 2008-04-08 11 +395 val_395 2008-04-08 11 +395 val_395 2008-04-08 12 +395 val_395 2008-04-08 12 +58 val_58 2008-04-08 11 +58 val_58 2008-04-08 11 +58 val_58 2008-04-08 12 +58 val_58 2008-04-08 12 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +336 val_336 2008-04-08 11 +336 val_336 2008-04-08 12 +95 val_95 2008-04-08 11 +95 val_95 2008-04-08 11 +95 val_95 2008-04-08 12 +95 val_95 2008-04-08 12 +11 val_11 2008-04-08 11 +11 val_11 2008-04-08 12 +168 val_168 2008-04-08 11 +168 val_168 2008-04-08 12 +34 val_34 2008-04-08 11 +34 val_34 2008-04-08 12 +229 val_229 2008-04-08 11 +229 val_229 2008-04-08 11 +229 val_229 2008-04-08 12 +229 val_229 2008-04-08 12 +233 val_233 2008-04-08 11 +233 val_233 2008-04-08 11 +233 val_233 2008-04-08 12 +233 val_233 2008-04-08 12 +143 val_143 2008-04-08 11 +143 val_143 2008-04-08 12 +472 val_472 2008-04-08 11 +472 val_472 2008-04-08 12 +322 val_322 2008-04-08 11 +322 val_322 2008-04-08 11 +322 val_322 2008-04-08 12 +322 val_322 2008-04-08 12 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +160 val_160 2008-04-08 11 +160 val_160 2008-04-08 12 +195 val_195 2008-04-08 11 +195 val_195 2008-04-08 11 +195 val_195 2008-04-08 12 +195 val_195 2008-04-08 12 +42 val_42 2008-04-08 11 +42 val_42 2008-04-08 11 +42 val_42 2008-04-08 12 +42 val_42 2008-04-08 12 +321 val_321 2008-04-08 11 +321 val_321 2008-04-08 11 +321 val_321 2008-04-08 12 +321 val_321 2008-04-08 12 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 11 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +430 val_430 2008-04-08 12 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 11 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +489 val_489 2008-04-08 12 +458 val_458 2008-04-08 11 +458 val_458 2008-04-08 11 +458 val_458 2008-04-08 12 +458 val_458 2008-04-08 12 +78 val_78 2008-04-08 11 +78 val_78 2008-04-08 12 +76 val_76 2008-04-08 11 +76 val_76 2008-04-08 11 +76 val_76 2008-04-08 12 +76 val_76 2008-04-08 12 +41 val_41 2008-04-08 11 +41 val_41 2008-04-08 12 +223 val_223 2008-04-08 11 +223 val_223 2008-04-08 11 +223 val_223 2008-04-08 12 +223 val_223 2008-04-08 12 +492 val_492 2008-04-08 11 +492 val_492 2008-04-08 11 +492 val_492 2008-04-08 12 +492 val_492 2008-04-08 12 +149 val_149 2008-04-08 11 +149 val_149 2008-04-08 11 +149 val_149 2008-04-08 12 +149 val_149 2008-04-08 12 +449 val_449 2008-04-08 11 +449 val_449 2008-04-08 12 +218 val_218 2008-04-08 11 +218 val_218 2008-04-08 12 +228 val_228 2008-04-08 11 +228 val_228 2008-04-08 12 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 11 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +138 val_138 2008-04-08 12 +453 val_453 2008-04-08 11 +453 val_453 2008-04-08 12 +30 val_30 2008-04-08 11 +30 val_30 2008-04-08 12 +209 val_209 2008-04-08 11 +209 val_209 2008-04-08 11 +209 val_209 2008-04-08 12 +209 val_209 2008-04-08 12 +64 val_64 2008-04-08 11 +64 val_64 2008-04-08 12 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +76 val_76 2008-04-08 11 +76 val_76 2008-04-08 11 +76 val_76 2008-04-08 12 +76 val_76 2008-04-08 12 +74 val_74 2008-04-08 11 +74 val_74 2008-04-08 12 +342 val_342 2008-04-08 11 +342 val_342 2008-04-08 11 +342 val_342 2008-04-08 12 +342 val_342 2008-04-08 12 +69 val_69 2008-04-08 11 +69 val_69 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +33 val_33 2008-04-08 11 +33 val_33 2008-04-08 12 +368 val_368 2008-04-08 11 +368 val_368 2008-04-08 12 +103 val_103 2008-04-08 11 +103 val_103 2008-04-08 11 +103 val_103 2008-04-08 12 +103 val_103 2008-04-08 12 +296 val_296 2008-04-08 11 +296 val_296 2008-04-08 12 +113 val_113 2008-04-08 11 +113 val_113 2008-04-08 11 +113 val_113 2008-04-08 12 +113 val_113 2008-04-08 12 +216 val_216 2008-04-08 11 +216 val_216 2008-04-08 11 +216 val_216 2008-04-08 12 +216 val_216 2008-04-08 12 +367 val_367 2008-04-08 11 +367 val_367 2008-04-08 11 +367 val_367 2008-04-08 12 +367 val_367 2008-04-08 12 +344 val_344 2008-04-08 11 +344 val_344 2008-04-08 11 +344 val_344 2008-04-08 12 +344 val_344 2008-04-08 12 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +274 val_274 2008-04-08 11 +274 val_274 2008-04-08 12 +219 val_219 2008-04-08 11 +219 val_219 2008-04-08 11 +219 val_219 2008-04-08 12 +219 val_219 2008-04-08 12 +239 val_239 2008-04-08 11 +239 val_239 2008-04-08 11 +239 val_239 2008-04-08 12 +239 val_239 2008-04-08 12 +485 val_485 2008-04-08 11 +485 val_485 2008-04-08 12 +116 val_116 2008-04-08 11 +116 val_116 2008-04-08 12 +223 val_223 2008-04-08 11 +223 val_223 2008-04-08 11 +223 val_223 2008-04-08 12 +223 val_223 2008-04-08 12 +256 val_256 2008-04-08 11 +256 val_256 2008-04-08 11 +256 val_256 2008-04-08 12 +256 val_256 2008-04-08 12 +263 val_263 2008-04-08 11 +263 val_263 2008-04-08 12 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +487 val_487 2008-04-08 11 +487 val_487 2008-04-08 12 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +288 val_288 2008-04-08 11 +288 val_288 2008-04-08 11 +288 val_288 2008-04-08 12 +288 val_288 2008-04-08 12 +191 val_191 2008-04-08 11 +191 val_191 2008-04-08 11 +191 val_191 2008-04-08 12 +191 val_191 2008-04-08 12 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +244 val_244 2008-04-08 11 +244 val_244 2008-04-08 12 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 11 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +128 val_128 2008-04-08 12 +467 val_467 2008-04-08 11 +467 val_467 2008-04-08 12 +432 val_432 2008-04-08 11 +432 val_432 2008-04-08 12 +202 val_202 2008-04-08 11 +202 val_202 2008-04-08 12 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 11 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +316 val_316 2008-04-08 12 +229 val_229 2008-04-08 11 +229 val_229 2008-04-08 11 +229 val_229 2008-04-08 12 +229 val_229 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +463 val_463 2008-04-08 11 +463 val_463 2008-04-08 11 +463 val_463 2008-04-08 12 +463 val_463 2008-04-08 12 +280 val_280 2008-04-08 11 +280 val_280 2008-04-08 11 +280 val_280 2008-04-08 12 +280 val_280 2008-04-08 12 +2 val_2 2008-04-08 11 +2 val_2 2008-04-08 12 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 11 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +35 val_35 2008-04-08 12 +283 val_283 2008-04-08 11 +283 val_283 2008-04-08 12 +331 val_331 2008-04-08 11 +331 val_331 2008-04-08 11 +331 val_331 2008-04-08 12 +331 val_331 2008-04-08 12 +235 val_235 2008-04-08 11 +235 val_235 2008-04-08 12 +80 val_80 2008-04-08 11 +80 val_80 2008-04-08 12 +44 val_44 2008-04-08 11 +44 val_44 2008-04-08 12 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 11 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +193 val_193 2008-04-08 12 +321 val_321 2008-04-08 11 +321 val_321 2008-04-08 11 +321 val_321 2008-04-08 12 +321 val_321 2008-04-08 12 +335 val_335 2008-04-08 11 +335 val_335 2008-04-08 12 +104 val_104 2008-04-08 11 +104 val_104 2008-04-08 11 +104 val_104 2008-04-08 12 +104 val_104 2008-04-08 12 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 11 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +466 val_466 2008-04-08 12 +366 val_366 2008-04-08 11 +366 val_366 2008-04-08 12 +175 val_175 2008-04-08 11 +175 val_175 2008-04-08 11 +175 val_175 2008-04-08 12 +175 val_175 2008-04-08 12 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +483 val_483 2008-04-08 11 +483 val_483 2008-04-08 12 +53 val_53 2008-04-08 11 +53 val_53 2008-04-08 12 +105 val_105 2008-04-08 11 +105 val_105 2008-04-08 12 +257 val_257 2008-04-08 11 +257 val_257 2008-04-08 12 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 11 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +409 val_409 2008-04-08 12 +190 val_190 2008-04-08 11 +190 val_190 2008-04-08 12 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +114 val_114 2008-04-08 11 +114 val_114 2008-04-08 12 +258 val_258 2008-04-08 11 +258 val_258 2008-04-08 12 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +203 val_203 2008-04-08 11 +203 val_203 2008-04-08 11 +203 val_203 2008-04-08 12 +203 val_203 2008-04-08 12 +262 val_262 2008-04-08 11 +262 val_262 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +424 val_424 2008-04-08 11 +424 val_424 2008-04-08 11 +424 val_424 2008-04-08 12 +424 val_424 2008-04-08 12 +12 val_12 2008-04-08 11 +12 val_12 2008-04-08 11 +12 val_12 2008-04-08 12 +12 val_12 2008-04-08 12 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 11 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +396 val_396 2008-04-08 12 +201 val_201 2008-04-08 11 +201 val_201 2008-04-08 12 +217 val_217 2008-04-08 11 +217 val_217 2008-04-08 11 +217 val_217 2008-04-08 12 +217 val_217 2008-04-08 12 +164 val_164 2008-04-08 11 +164 val_164 2008-04-08 11 +164 val_164 2008-04-08 12 +164 val_164 2008-04-08 12 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +478 val_478 2008-04-08 11 +478 val_478 2008-04-08 11 +478 val_478 2008-04-08 12 +478 val_478 2008-04-08 12 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +125 val_125 2008-04-08 11 +125 val_125 2008-04-08 11 +125 val_125 2008-04-08 12 +125 val_125 2008-04-08 12 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 11 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +431 val_431 2008-04-08 12 +164 val_164 2008-04-08 11 +164 val_164 2008-04-08 11 +164 val_164 2008-04-08 12 +164 val_164 2008-04-08 12 +424 val_424 2008-04-08 11 +424 val_424 2008-04-08 11 +424 val_424 2008-04-08 12 +424 val_424 2008-04-08 12 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 11 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +187 val_187 2008-04-08 12 +382 val_382 2008-04-08 11 +382 val_382 2008-04-08 11 +382 val_382 2008-04-08 12 +382 val_382 2008-04-08 12 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 11 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +5 val_5 2008-04-08 12 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +397 val_397 2008-04-08 11 +397 val_397 2008-04-08 11 +397 val_397 2008-04-08 12 +397 val_397 2008-04-08 12 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +291 val_291 2008-04-08 11 +291 val_291 2008-04-08 12 +24 val_24 2008-04-08 11 +24 val_24 2008-04-08 11 +24 val_24 2008-04-08 12 +24 val_24 2008-04-08 12 +351 val_351 2008-04-08 11 +351 val_351 2008-04-08 12 +255 val_255 2008-04-08 11 +255 val_255 2008-04-08 11 +255 val_255 2008-04-08 12 +255 val_255 2008-04-08 12 +104 val_104 2008-04-08 11 +104 val_104 2008-04-08 11 +104 val_104 2008-04-08 12 +104 val_104 2008-04-08 12 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 11 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +70 val_70 2008-04-08 12 +163 val_163 2008-04-08 11 +163 val_163 2008-04-08 12 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 11 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +438 val_438 2008-04-08 12 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 11 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +119 val_119 2008-04-08 12 +414 val_414 2008-04-08 11 +414 val_414 2008-04-08 11 +414 val_414 2008-04-08 12 +414 val_414 2008-04-08 12 +200 val_200 2008-04-08 11 +200 val_200 2008-04-08 11 +200 val_200 2008-04-08 12 +200 val_200 2008-04-08 12 +491 val_491 2008-04-08 11 +491 val_491 2008-04-08 12 +237 val_237 2008-04-08 11 +237 val_237 2008-04-08 11 +237 val_237 2008-04-08 12 +237 val_237 2008-04-08 12 +439 val_439 2008-04-08 11 +439 val_439 2008-04-08 11 +439 val_439 2008-04-08 12 +439 val_439 2008-04-08 12 +360 val_360 2008-04-08 11 +360 val_360 2008-04-08 12 +248 val_248 2008-04-08 11 +248 val_248 2008-04-08 12 +479 val_479 2008-04-08 11 +479 val_479 2008-04-08 12 +305 val_305 2008-04-08 11 +305 val_305 2008-04-08 12 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 11 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +417 val_417 2008-04-08 12 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 11 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +199 val_199 2008-04-08 12 +444 val_444 2008-04-08 11 +444 val_444 2008-04-08 12 +120 val_120 2008-04-08 11 +120 val_120 2008-04-08 11 +120 val_120 2008-04-08 12 +120 val_120 2008-04-08 12 +429 val_429 2008-04-08 11 +429 val_429 2008-04-08 11 +429 val_429 2008-04-08 12 +429 val_429 2008-04-08 12 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +443 val_443 2008-04-08 11 +443 val_443 2008-04-08 12 +323 val_323 2008-04-08 11 +323 val_323 2008-04-08 12 +325 val_325 2008-04-08 11 +325 val_325 2008-04-08 11 +325 val_325 2008-04-08 12 +325 val_325 2008-04-08 12 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 11 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +277 val_277 2008-04-08 12 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 11 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +230 val_230 2008-04-08 12 +478 val_478 2008-04-08 11 +478 val_478 2008-04-08 11 +478 val_478 2008-04-08 12 +478 val_478 2008-04-08 12 +178 val_178 2008-04-08 11 +178 val_178 2008-04-08 12 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 11 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +468 val_468 2008-04-08 12 +310 val_310 2008-04-08 11 +310 val_310 2008-04-08 12 +317 val_317 2008-04-08 11 +317 val_317 2008-04-08 11 +317 val_317 2008-04-08 12 +317 val_317 2008-04-08 12 +333 val_333 2008-04-08 11 +333 val_333 2008-04-08 11 +333 val_333 2008-04-08 12 +333 val_333 2008-04-08 12 +493 val_493 2008-04-08 11 +493 val_493 2008-04-08 12 +460 val_460 2008-04-08 11 +460 val_460 2008-04-08 12 +207 val_207 2008-04-08 11 +207 val_207 2008-04-08 11 +207 val_207 2008-04-08 12 +207 val_207 2008-04-08 12 +249 val_249 2008-04-08 11 +249 val_249 2008-04-08 12 +265 val_265 2008-04-08 11 +265 val_265 2008-04-08 11 +265 val_265 2008-04-08 12 +265 val_265 2008-04-08 12 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 11 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +480 val_480 2008-04-08 12 +83 val_83 2008-04-08 11 +83 val_83 2008-04-08 11 +83 val_83 2008-04-08 12 +83 val_83 2008-04-08 12 +136 val_136 2008-04-08 11 +136 val_136 2008-04-08 12 +353 val_353 2008-04-08 11 +353 val_353 2008-04-08 11 +353 val_353 2008-04-08 12 +353 val_353 2008-04-08 12 +172 val_172 2008-04-08 11 +172 val_172 2008-04-08 11 +172 val_172 2008-04-08 12 +172 val_172 2008-04-08 12 +214 val_214 2008-04-08 11 +214 val_214 2008-04-08 12 +462 val_462 2008-04-08 11 +462 val_462 2008-04-08 11 +462 val_462 2008-04-08 12 +462 val_462 2008-04-08 12 +233 val_233 2008-04-08 11 +233 val_233 2008-04-08 11 +233 val_233 2008-04-08 12 +233 val_233 2008-04-08 12 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 11 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +406 val_406 2008-04-08 12 +133 val_133 2008-04-08 11 +133 val_133 2008-04-08 12 +175 val_175 2008-04-08 11 +175 val_175 2008-04-08 11 +175 val_175 2008-04-08 12 +175 val_175 2008-04-08 12 +189 val_189 2008-04-08 11 +189 val_189 2008-04-08 12 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 11 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +454 val_454 2008-04-08 12 +375 val_375 2008-04-08 11 +375 val_375 2008-04-08 12 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 11 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +401 val_401 2008-04-08 12 +421 val_421 2008-04-08 11 +421 val_421 2008-04-08 12 +407 val_407 2008-04-08 11 +407 val_407 2008-04-08 12 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +256 val_256 2008-04-08 11 +256 val_256 2008-04-08 11 +256 val_256 2008-04-08 12 +256 val_256 2008-04-08 12 +26 val_26 2008-04-08 11 +26 val_26 2008-04-08 11 +26 val_26 2008-04-08 12 +26 val_26 2008-04-08 12 +134 val_134 2008-04-08 11 +134 val_134 2008-04-08 11 +134 val_134 2008-04-08 12 +134 val_134 2008-04-08 12 +67 val_67 2008-04-08 11 +67 val_67 2008-04-08 11 +67 val_67 2008-04-08 12 +67 val_67 2008-04-08 12 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 11 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +384 val_384 2008-04-08 12 +379 val_379 2008-04-08 11 +379 val_379 2008-04-08 12 +18 val_18 2008-04-08 11 +18 val_18 2008-04-08 11 +18 val_18 2008-04-08 12 +18 val_18 2008-04-08 12 +462 val_462 2008-04-08 11 +462 val_462 2008-04-08 11 +462 val_462 2008-04-08 12 +462 val_462 2008-04-08 12 +492 val_492 2008-04-08 11 +492 val_492 2008-04-08 11 +492 val_492 2008-04-08 12 +492 val_492 2008-04-08 12 +100 val_100 2008-04-08 11 +100 val_100 2008-04-08 11 +100 val_100 2008-04-08 12 +100 val_100 2008-04-08 12 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 11 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +298 val_298 2008-04-08 12 +9 val_9 2008-04-08 11 +9 val_9 2008-04-08 12 +341 val_341 2008-04-08 11 +341 val_341 2008-04-08 12 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 11 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +498 val_498 2008-04-08 12 +146 val_146 2008-04-08 11 +146 val_146 2008-04-08 11 +146 val_146 2008-04-08 12 +146 val_146 2008-04-08 12 +458 val_458 2008-04-08 11 +458 val_458 2008-04-08 11 +458 val_458 2008-04-08 12 +458 val_458 2008-04-08 12 +362 val_362 2008-04-08 11 +362 val_362 2008-04-08 12 +186 val_186 2008-04-08 11 +186 val_186 2008-04-08 12 +285 val_285 2008-04-08 11 +285 val_285 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 11 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +167 val_167 2008-04-08 12 +18 val_18 2008-04-08 11 +18 val_18 2008-04-08 11 +18 val_18 2008-04-08 12 +18 val_18 2008-04-08 12 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 11 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +273 val_273 2008-04-08 12 +183 val_183 2008-04-08 11 +183 val_183 2008-04-08 12 +281 val_281 2008-04-08 11 +281 val_281 2008-04-08 11 +281 val_281 2008-04-08 12 +281 val_281 2008-04-08 12 +344 val_344 2008-04-08 11 +344 val_344 2008-04-08 11 +344 val_344 2008-04-08 12 +344 val_344 2008-04-08 12 +97 val_97 2008-04-08 11 +97 val_97 2008-04-08 11 +97 val_97 2008-04-08 12 +97 val_97 2008-04-08 12 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 11 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +469 val_469 2008-04-08 12 +315 val_315 2008-04-08 11 +315 val_315 2008-04-08 12 +84 val_84 2008-04-08 11 +84 val_84 2008-04-08 11 +84 val_84 2008-04-08 12 +84 val_84 2008-04-08 12 +28 val_28 2008-04-08 11 +28 val_28 2008-04-08 12 +37 val_37 2008-04-08 11 +37 val_37 2008-04-08 11 +37 val_37 2008-04-08 12 +37 val_37 2008-04-08 12 +448 val_448 2008-04-08 11 +448 val_448 2008-04-08 12 +152 val_152 2008-04-08 11 +152 val_152 2008-04-08 11 +152 val_152 2008-04-08 12 +152 val_152 2008-04-08 12 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 11 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +348 val_348 2008-04-08 12 +307 val_307 2008-04-08 11 +307 val_307 2008-04-08 11 +307 val_307 2008-04-08 12 +307 val_307 2008-04-08 12 +194 val_194 2008-04-08 11 +194 val_194 2008-04-08 12 +414 val_414 2008-04-08 11 +414 val_414 2008-04-08 11 +414 val_414 2008-04-08 12 +414 val_414 2008-04-08 12 +477 val_477 2008-04-08 11 +477 val_477 2008-04-08 12 +222 val_222 2008-04-08 11 +222 val_222 2008-04-08 12 +126 val_126 2008-04-08 11 +126 val_126 2008-04-08 12 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 11 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +90 val_90 2008-04-08 12 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 11 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +169 val_169 2008-04-08 12 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 11 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +403 val_403 2008-04-08 12 +400 val_400 2008-04-08 11 +400 val_400 2008-04-08 12 +200 val_200 2008-04-08 11 +200 val_200 2008-04-08 11 +200 val_200 2008-04-08 12 +200 val_200 2008-04-08 12 +97 val_97 2008-04-08 11 +97 val_97 2008-04-08 11 +97 val_97 2008-04-08 12 +97 val_97 2008-04-08 12 Index: ql/src/test/results/clientpositive/join6_map.q.out =================================================================== --- ql/src/test/results/clientpositive/join6_map.q.out (revision 0) +++ ql/src/test/results/clientpositive/join6_map.q.out (revision 0) @@ -0,0 +1,608 @@ +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_JOIN (TOK_TABREF src src1) (TOK_TABREF src src2) (= (TOK_COLREF src1 key) (TOK_COLREF src2 key))) (TOK_TABREF src src3) (= (+ (TOK_COLREF src1 key) (TOK_COLREF src1 key)) (TOK_COLREF src3 key)))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_HINTLIST (TOK_HINT TOK_MAPJOIN (TOK_HINTARGLIST src1 src3))) (TOK_SELEXPR (TOK_ALLCOLREF src1))))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + src2 + Select Operator + expressions: + expr: key + type: string + Map Sink Operator + expressions: + expr: 1 + type: int + expr: 0 + type: string + tag: 1 + dummy: true + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Map Sink Operator + expressions: + expr: 0 + type: int + expr: 2 + type: string + expr: 0 + type: string + expr: 1 + type: string + tag: 0 + dummy: true + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Select Operator + expressions: + expr: 1 + type: string + expr: 2 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + Local Work: + Map Reduce Local Work + Alias -> Map Local Tables: + src3 + Fetch Operator + limit: -1 + src1 + Fetch Operator + limit: -1 + Alias -> Map Local Operator Tree: + src3 + Select Operator + expressions: + expr: key + type: string + Map Sink Operator + expressions: + expr: 1 + type: int + expr: 0 + type: string + tag: 1 + dummy: false + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Select Operator + expressions: + expr: 1 + type: string + expr: 2 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + src1 + Map Sink Operator + expressions: + expr: 0 + type: int + expr: key + type: string + expr: value + type: string + tag: 0 + dummy: false + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Map Sink Operator + expressions: + expr: 0 + type: int + expr: 2 + type: string + expr: 0 + type: string + expr: 1 + type: string + tag: 0 + dummy: true + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Select Operator + expressions: + expr: 1 + type: string + expr: 2 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +86 val_86 +86 val_86 +27 val_27 +98 val_98 +98 val_98 +193 val_193 +193 val_193 +193 val_193 +224 val_224 +224 val_224 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +146 val_146 +146 val_146 +37 val_37 +37 val_37 +209 val_209 +209 val_209 +15 val_15 +15 val_15 +82 val_82 +82 val_82 +166 val_166 +219 val_219 +219 val_219 +219 val_219 +219 val_219 +219 val_219 +219 val_219 +153 val_153 +193 val_193 +193 val_193 +193 val_193 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +207 val_207 +207 val_207 +207 val_207 +207 val_207 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +174 val_174 +247 val_247 +17 val_17 +113 val_113 +113 val_113 +155 val_155 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +57 val_57 +149 val_149 +149 val_149 +149 val_149 +149 val_149 +149 val_149 +149 val_149 +129 val_129 +129 val_129 +111 val_111 +4 val_4 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +169 val_169 +169 val_169 +169 val_169 +169 val_169 +192 val_192 +192 val_192 +192 val_192 +187 val_187 +187 val_187 +187 val_187 +239 val_239 +239 val_239 +239 val_239 +239 val_239 +216 val_216 +216 val_216 +137 val_137 +137 val_137 +241 val_241 +83 val_83 +83 val_83 +180 val_180 +12 val_12 +12 val_12 +12 val_12 +12 val_12 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +181 val_181 +67 val_67 +67 val_67 +67 val_67 +67 val_67 +84 val_84 +84 val_84 +58 val_58 +58 val_58 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +172 val_172 +172 val_172 +172 val_172 +172 val_172 +42 val_42 +42 val_42 +42 val_42 +42 val_42 +129 val_129 +129 val_129 +158 val_158 +158 val_158 +158 val_158 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +197 val_197 +197 val_197 +100 val_100 +100 val_100 +100 val_100 +100 val_100 +191 val_191 +191 val_191 +191 val_191 +191 val_191 +96 val_96 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +131 val_131 +43 val_43 +95 val_95 +95 val_95 +196 val_196 +98 val_98 +98 val_98 +197 val_197 +197 val_197 +187 val_187 +187 val_187 +187 val_187 +137 val_137 +137 val_137 +169 val_169 +169 val_169 +169 val_169 +169 val_169 +85 val_85 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +87 val_87 +87 val_87 +15 val_15 +15 val_15 +90 val_90 +90 val_90 +90 val_90 +10 val_10 +224 val_224 +224 val_224 +242 val_242 +242 val_242 +242 val_242 +242 val_242 +226 val_226 +5 val_5 +5 val_5 +5 val_5 +58 val_58 +58 val_58 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +95 val_95 +95 val_95 +168 val_168 +229 val_229 +229 val_229 +229 val_229 +229 val_229 +233 val_233 +233 val_233 +233 val_233 +233 val_233 +233 val_233 +233 val_233 +143 val_143 +42 val_42 +42 val_42 +42 val_42 +42 val_42 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +78 val_78 +76 val_76 +76 val_76 +76 val_76 +76 val_76 +41 val_41 +223 val_223 +223 val_223 +149 val_149 +149 val_149 +149 val_149 +149 val_149 +149 val_149 +149 val_149 +218 val_218 +209 val_209 +209 val_209 +64 val_64 +64 val_64 +64 val_64 +76 val_76 +76 val_76 +76 val_76 +76 val_76 +69 val_69 +69 val_69 +69 val_69 +69 val_69 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +33 val_33 +113 val_113 +113 val_113 +216 val_216 +216 val_216 +219 val_219 +219 val_219 +219 val_219 +219 val_219 +219 val_219 +219 val_219 +239 val_239 +239 val_239 +239 val_239 +239 val_239 +223 val_223 +223 val_223 +191 val_191 +191 val_191 +191 val_191 +191 val_191 +5 val_5 +5 val_5 +5 val_5 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +128 val_128 +202 val_202 +202 val_202 +229 val_229 +229 val_229 +229 val_229 +229 val_229 +2 val_2 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +35 val_35 +235 val_235 +80 val_80 +193 val_193 +193 val_193 +193 val_193 +104 val_104 +104 val_104 +104 val_104 +104 val_104 +104 val_104 +104 val_104 +114 val_114 +90 val_90 +90 val_90 +90 val_90 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +203 val_203 +12 val_12 +12 val_12 +12 val_12 +12 val_12 +201 val_201 +187 val_187 +187 val_187 +187 val_187 +5 val_5 +5 val_5 +5 val_5 +104 val_104 +104 val_104 +104 val_104 +104 val_104 +104 val_104 +104 val_104 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +119 val_119 +200 val_200 +200 val_200 +248 val_248 +169 val_169 +169 val_169 +169 val_169 +169 val_169 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +178 val_178 +207 val_207 +207 val_207 +207 val_207 +207 val_207 +249 val_249 +249 val_249 +249 val_249 +83 val_83 +83 val_83 +136 val_136 +136 val_136 +172 val_172 +172 val_172 +172 val_172 +172 val_172 +233 val_233 +233 val_233 +233 val_233 +233 val_233 +233 val_233 +233 val_233 +133 val_133 +189 val_189 +67 val_67 +67 val_67 +67 val_67 +67 val_67 +100 val_100 +100 val_100 +100 val_100 +100 val_100 +9 val_9 +9 val_9 +146 val_146 +146 val_146 +183 val_183 +97 val_97 +97 val_97 +84 val_84 +84 val_84 +37 val_37 +37 val_37 +222 val_222 +126 val_126 +90 val_90 +90 val_90 +90 val_90 +169 val_169 +169 val_169 +169 val_169 +169 val_169 +200 val_200 +200 val_200 +97 val_97 +97 val_97 Index: ql/src/test/results/clientpositive/join3_map.q.out =================================================================== --- ql/src/test/results/clientpositive/join3_map.q.out (revision 0) +++ ql/src/test/results/clientpositive/join3_map.q.out (revision 0) @@ -0,0 +1,228 @@ +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_TABREF src src1) (TOK_TABREF src src2) (AND (= (TOK_COLREF src1 key) (TOK_COLREF src2 key)) (< (TOK_COLREF src1 key) 100)))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_HINTLIST (TOK_HINT TOK_MAPJOIN (TOK_HINTARGLIST src1))) (TOK_SELEXPR (TOK_ALLCOLREF src1))))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + src2 + Select Operator + expressions: + expr: key + type: string + Map Sink Operator + expressions: + expr: 1 + type: int + expr: 0 + type: string + tag: 1 + dummy: true + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + Local Work: + Map Reduce Local Work + Alias -> Map Local Tables: + src1 + Fetch Operator + limit: -1 + Alias -> Map Local Operator Tree: + src1 + Filter Operator + predicate: + expr: (key < 100) + type: boolean + Map Sink Operator + expressions: + expr: 0 + type: int + expr: key + type: string + expr: value + type: string + tag: 0 + dummy: false + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +86 val_86 +27 val_27 +98 val_98 +98 val_98 +66 val_66 +37 val_37 +37 val_37 +15 val_15 +15 val_15 +82 val_82 +17 val_17 +0 val_0 +0 val_0 +0 val_0 +57 val_57 +20 val_20 +92 val_92 +47 val_47 +72 val_72 +72 val_72 +4 val_4 +35 val_35 +35 val_35 +35 val_35 +54 val_54 +51 val_51 +51 val_51 +65 val_65 +83 val_83 +83 val_83 +12 val_12 +12 val_12 +67 val_67 +67 val_67 +84 val_84 +84 val_84 +58 val_58 +58 val_58 +8 val_8 +24 val_24 +24 val_24 +42 val_42 +42 val_42 +0 val_0 +0 val_0 +0 val_0 +96 val_96 +26 val_26 +26 val_26 +51 val_51 +51 val_51 +43 val_43 +95 val_95 +95 val_95 +98 val_98 +98 val_98 +85 val_85 +77 val_77 +0 val_0 +0 val_0 +0 val_0 +87 val_87 +15 val_15 +15 val_15 +72 val_72 +72 val_72 +90 val_90 +90 val_90 +90 val_90 +19 val_19 +10 val_10 +5 val_5 +5 val_5 +5 val_5 +58 val_58 +58 val_58 +35 val_35 +35 val_35 +35 val_35 +95 val_95 +95 val_95 +11 val_11 +34 val_34 +42 val_42 +42 val_42 +78 val_78 +76 val_76 +76 val_76 +41 val_41 +30 val_30 +64 val_64 +76 val_76 +76 val_76 +74 val_74 +69 val_69 +33 val_33 +70 val_70 +70 val_70 +70 val_70 +5 val_5 +5 val_5 +5 val_5 +2 val_2 +35 val_35 +35 val_35 +35 val_35 +80 val_80 +44 val_44 +53 val_53 +90 val_90 +90 val_90 +90 val_90 +12 val_12 +12 val_12 +5 val_5 +5 val_5 +5 val_5 +70 val_70 +70 val_70 +70 val_70 +24 val_24 +24 val_24 +70 val_70 +70 val_70 +70 val_70 +83 val_83 +83 val_83 +26 val_26 +26 val_26 +67 val_67 +67 val_67 +18 val_18 +18 val_18 +9 val_9 +18 val_18 +18 val_18 +97 val_97 +97 val_97 +84 val_84 +84 val_84 +28 val_28 +37 val_37 +37 val_37 +90 val_90 +90 val_90 +90 val_90 +97 val_97 +97 val_97 Index: ql/src/test/results/clientpositive/join4_map.q.out =================================================================== --- ql/src/test/results/clientpositive/join4_map.q.out (revision 0) +++ ql/src/test/results/clientpositive/join4_map.q.out (revision 0) @@ -0,0 +1,171 @@ +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_JOIN (TOK_TABREF src src1) (TOK_TABREF src src2) (AND (= (TOK_COLREF src1 key) (TOK_COLREF src2 key)) (< (TOK_COLREF src1 key) 10))) (TOK_TABREF src src3) (= (TOK_COLREF src1 key) (TOK_COLREF src3 key)))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_HINTLIST (TOK_HINT TOK_MAPJOIN (TOK_HINTARGLIST src1 src2))) (TOK_SELEXPR (TOK_ALLCOLREF src1))))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + src3 + Select Operator + expressions: + expr: key + type: string + Map Sink Operator + expressions: + expr: 2 + type: int + expr: 0 + type: string + tag: 2 + dummy: true + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Inner Join 0 to 1 + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + Local Work: + Map Reduce Local Work + Alias -> Map Local Tables: + src2 + Fetch Operator + limit: -1 + src1 + Fetch Operator + limit: -1 + Alias -> Map Local Operator Tree: + src2 + Select Operator + expressions: + expr: key + type: string + Map Sink Operator + expressions: + expr: 1 + type: int + expr: 0 + type: string + tag: 1 + dummy: false + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Inner Join 0 to 1 + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + src1 + Filter Operator + predicate: + expr: (key < 10) + type: boolean + Map Sink Operator + expressions: + expr: 0 + type: int + expr: key + type: string + expr: value + type: string + tag: 0 + dummy: false + MapSide Join Operator + condition map: + Inner Join 0 to 1 + Inner Join 0 to 1 + Select Operator + expressions: + expr: 0 + type: string + expr: 1 + type: string + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat + + Stage: Stage-0 + Fetch Operator + limit: -1 + + +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +4 val_4 +8 val_8 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +0 val_0 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +2 val_2 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +5 val_5 +9 val_9 Index: ql/src/test/results/compiler/plan/join2.q.xml =================================================================== --- ql/src/test/results/compiler/plan/join2.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/join2.q.xml (working copy) @@ -35,7 +35,7 @@ true - /tmp/hive-njain/441145354.10000.insclause-0 + /tmp/hive-njain/21192630.10000.insclause-0 @@ -84,7 +84,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -269,6 +269,9 @@ + + 153 + @@ -308,6 +311,9 @@ + + 137 + @@ -536,6 +542,9 @@ + + 152 + @@ -547,7 +556,7 @@ - /tmp/hive-njain/709768097/233295454.10001 + /tmp/hive-njain/578868297/85673113.10001 @@ -580,6 +589,9 @@ + + 157 + @@ -668,6 +680,9 @@ + + 151 + @@ -772,6 +787,9 @@ + + 149 + @@ -801,6 +819,9 @@ + + 148 + @@ -812,6 +833,9 @@ + + 138 + @@ -991,6 +1015,9 @@ + + 150 + @@ -1020,6 +1047,9 @@ + + 147 + @@ -1031,6 +1061,9 @@ + + 136 + @@ -1155,7 +1188,7 @@ - /tmp/hive-njain/709768097/233295454.10001 + /tmp/hive-njain/578868297/85673113.10001 $INTNAME @@ -1163,7 +1196,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src3 @@ -1175,7 +1208,7 @@ - /tmp/hive-njain/709768097/233295454.10001 + /tmp/hive-njain/578868297/85673113.10001 @@ -1183,7 +1216,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1235,7 +1268,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1261,13 +1294,16 @@ - /tmp/hive-njain/441145354.10000.insclause-0 + /tmp/hive-njain/21192630.10000.insclause-0 + + 156 + @@ -1335,6 +1371,9 @@ + + 155 + @@ -1422,6 +1461,9 @@ + + 154 + @@ -1524,7 +1566,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src2 @@ -1539,7 +1581,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1591,7 +1633,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/input2.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input2.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input2.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/104100889/1367774772.10000.insclause-0 + /tmp/hive-njain/672416/662504855.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -100,7 +100,7 @@ true - /tmp/hive-njain/104100889/1367774772.10001.insclause-1 + /tmp/hive-njain/672416/662504855.10001.insclause-1 @@ -149,7 +149,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest2 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest2 @@ -178,7 +178,7 @@ true - /tmp/hive-njain/104100889/1367774772.10002.insclause-2 + /tmp/hive-njain/672416/662504855.10002.insclause-2 @@ -231,7 +231,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest3 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest3 @@ -275,13 +275,16 @@ - /tmp/hive-njain/104100889/1367774772.10000.insclause-0 + /tmp/hive-njain/672416/662504855.10000.insclause-0 + + 175 + @@ -356,6 +359,9 @@ + + 174 + @@ -433,6 +439,9 @@ + + 173 + @@ -483,13 +492,16 @@ - /tmp/hive-njain/104100889/1367774772.10001.insclause-1 + /tmp/hive-njain/672416/662504855.10001.insclause-1 + + 178 + @@ -557,6 +569,9 @@ + + 177 + @@ -700,6 +715,9 @@ + + 176 + @@ -729,13 +747,16 @@ - /tmp/hive-njain/104100889/1367774772.10002.insclause-2 + /tmp/hive-njain/672416/662504855.10002.insclause-2 + + 181 + @@ -803,6 +824,9 @@ + + 180 + @@ -872,6 +896,9 @@ + + 179 + @@ -890,6 +917,9 @@ + + 172 + @@ -904,7 +934,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -916,7 +946,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -968,7 +998,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/join3.q.xml =================================================================== --- ql/src/test/results/compiler/plan/join3.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/join3.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/268045919.10000.insclause-0 + /tmp/hive-njain/1249745337.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -224,6 +224,9 @@ + + 204 + @@ -271,6 +274,9 @@ + + 201 + @@ -300,6 +306,9 @@ + + 192 + @@ -450,6 +459,9 @@ + + 205 + @@ -489,6 +501,9 @@ + + 193 + @@ -630,6 +645,9 @@ + + 203 + @@ -677,6 +695,9 @@ + + 202 + @@ -706,6 +727,9 @@ + + 194 + @@ -747,7 +771,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src2 @@ -765,7 +789,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -817,7 +841,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -843,13 +867,16 @@ - /tmp/hive-njain/268045919.10000.insclause-0 + /tmp/hive-njain/1249745337.10000.insclause-0 + + 208 + @@ -917,6 +944,9 @@ + + 207 + @@ -1016,6 +1046,9 @@ + + 206 + Index: ql/src/test/results/compiler/plan/input3.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input3.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input3.q.xml (working copy) @@ -28,7 +28,7 @@ true - /tmp/hive-njain/44210915/741228445.10003.insclause-3 + /tmp/hive-njain/159626470/1069993351.10003.insclause-3 ../../../../build/contrib/hive/ql/test/data/warehouse/dest4.out @@ -48,7 +48,7 @@ true - /tmp/hive-njain/44210915/741228445.10000.insclause-0 + /tmp/hive-njain/159626470/1069993351.10000.insclause-0 @@ -97,7 +97,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -117,7 +117,7 @@ true - /tmp/hive-njain/44210915/741228445.10001.insclause-1 + /tmp/hive-njain/159626470/1069993351.10001.insclause-1 @@ -166,7 +166,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest2 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest2 @@ -195,7 +195,7 @@ true - /tmp/hive-njain/44210915/741228445.10002.insclause-2 + /tmp/hive-njain/159626470/1069993351.10002.insclause-2 @@ -248,7 +248,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest3 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest3 @@ -292,13 +292,16 @@ - /tmp/hive-njain/44210915/741228445.10000.insclause-0 + /tmp/hive-njain/159626470/1069993351.10000.insclause-0 + + 223 + @@ -373,6 +376,9 @@ + + 222 + @@ -450,6 +456,9 @@ + + 221 + @@ -500,13 +509,16 @@ - /tmp/hive-njain/44210915/741228445.10001.insclause-1 + /tmp/hive-njain/159626470/1069993351.10001.insclause-1 + + 226 + @@ -574,6 +586,9 @@ + + 225 + @@ -717,6 +732,9 @@ + + 224 + @@ -746,13 +764,16 @@ - /tmp/hive-njain/44210915/741228445.10002.insclause-2 + /tmp/hive-njain/159626470/1069993351.10002.insclause-2 + + 229 + @@ -820,6 +841,9 @@ + + 228 + @@ -963,6 +987,9 @@ + + 227 + @@ -992,7 +1019,7 @@ - /tmp/hive-njain/44210915/741228445.10003.insclause-3 + /tmp/hive-njain/159626470/1069993351.10003.insclause-3 @@ -1021,6 +1048,9 @@ + + 232 + @@ -1068,6 +1098,9 @@ + + 231 + @@ -1137,6 +1170,9 @@ + + 230 + @@ -1155,6 +1191,9 @@ + + 220 + @@ -1169,7 +1208,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -1181,7 +1220,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1233,7 +1272,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/join4.q.xml =================================================================== --- ql/src/test/results/compiler/plan/join4.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/join4.q.xml (working copy) @@ -140,6 +140,9 @@ + + 269 + @@ -207,6 +210,9 @@ + + 264 + @@ -379,6 +385,9 @@ + + 263 + @@ -418,6 +427,9 @@ + + 262 + @@ -552,6 +564,9 @@ + + 268 + @@ -619,6 +634,9 @@ + + 267 + @@ -783,6 +801,9 @@ + + 266 + @@ -822,6 +843,9 @@ + + 265 + @@ -842,7 +866,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src c:a:src1 @@ -857,7 +881,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -909,7 +933,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -939,7 +963,7 @@ - /tmp/hive-njain/291874807/86598252.10001.insclause-0 + /tmp/hive-njain/66530019/203792025.10001.insclause-0 @@ -968,6 +992,9 @@ + + 273 + @@ -1075,6 +1102,9 @@ + + 272 + @@ -1141,6 +1171,9 @@ + + 271 + @@ -1272,6 +1305,9 @@ + + 270 + Index: ql/src/test/results/compiler/plan/input4.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input4.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input4.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/89591678/324016511.10000.insclause-0 + /tmp/hive-njain/604034756/526257485.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -249,6 +249,9 @@ + + 249 + @@ -345,6 +348,9 @@ + + 248 + @@ -391,6 +397,9 @@ + + 247 + @@ -430,6 +439,9 @@ + + 246 + @@ -468,7 +480,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src tmap:src @@ -480,7 +492,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -532,7 +544,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -562,13 +574,16 @@ - /tmp/hive-njain/89591678/324016511.10000.insclause-0 + /tmp/hive-njain/604034756/526257485.10000.insclause-0 + + 253 + @@ -636,6 +651,9 @@ + + 252 + @@ -713,6 +731,9 @@ + + 251 + @@ -766,6 +787,9 @@ + + 250 + Index: ql/src/test/results/compiler/plan/join5.q.xml =================================================================== --- ql/src/test/results/compiler/plan/join5.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/join5.q.xml (working copy) @@ -140,6 +140,9 @@ + + 315 + @@ -207,6 +210,9 @@ + + 310 + @@ -379,6 +385,9 @@ + + 309 + @@ -418,6 +427,9 @@ + + 308 + @@ -552,6 +564,9 @@ + + 314 + @@ -619,6 +634,9 @@ + + 313 + @@ -783,6 +801,9 @@ + + 312 + @@ -822,6 +843,9 @@ + + 311 + @@ -842,7 +866,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src c:a:src1 @@ -857,7 +881,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -909,7 +933,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -939,7 +963,7 @@ - /tmp/hive-njain/1109739262/425333867.10001.insclause-0 + /tmp/hive-njain/734573674/74555025.10001.insclause-0 @@ -968,6 +992,9 @@ + + 319 + @@ -1075,6 +1102,9 @@ + + 318 + @@ -1141,6 +1171,9 @@ + + 317 + @@ -1272,6 +1305,9 @@ + + 316 + Index: ql/src/test/results/compiler/plan/input5.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input5.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input5.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/113180245.10000.insclause-0 + /tmp/hive-njain/212736260.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -253,6 +253,9 @@ + + 296 + @@ -349,6 +352,9 @@ + + 295 + @@ -407,6 +413,9 @@ + + 294 + @@ -474,6 +483,9 @@ + + 293 + @@ -513,6 +525,9 @@ + + 286 + @@ -602,7 +617,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift tmap:src_thrift @@ -614,7 +629,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift @@ -670,7 +685,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift @@ -696,13 +711,16 @@ - /tmp/hive-njain/113180245.10000.insclause-0 + /tmp/hive-njain/212736260.10000.insclause-0 + + 299 + @@ -770,6 +788,9 @@ + + 298 + @@ -802,6 +823,9 @@ + + 297 + Index: ql/src/test/results/compiler/plan/join6.q.xml =================================================================== --- ql/src/test/results/compiler/plan/join6.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/join6.q.xml (working copy) @@ -140,6 +140,9 @@ + + 360 + @@ -207,6 +210,9 @@ + + 355 + @@ -379,6 +385,9 @@ + + 354 + @@ -418,6 +427,9 @@ + + 353 + @@ -552,6 +564,9 @@ + + 359 + @@ -619,6 +634,9 @@ + + 358 + @@ -783,6 +801,9 @@ + + 357 + @@ -822,6 +843,9 @@ + + 356 + @@ -842,7 +866,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src c:a:src1 @@ -857,7 +881,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -909,7 +933,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -939,7 +963,7 @@ - /tmp/hive-njain/166521027/637281771.10001.insclause-0 + /tmp/hive-njain/1246465596/447292472.10001.insclause-0 @@ -968,6 +992,9 @@ + + 364 + @@ -1075,6 +1102,9 @@ + + 363 + @@ -1141,6 +1171,9 @@ + + 362 + @@ -1272,6 +1305,9 @@ + + 361 + Index: ql/src/test/results/compiler/plan/input_testxpath2.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input_testxpath2.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input_testxpath2.q.xml (working copy) @@ -30,7 +30,7 @@ - /tmp/hive-njain/610717789.10001.insclause-0 + /tmp/hive-njain/121923200.10001.insclause-0 @@ -59,6 +59,9 @@ + + 347 + @@ -241,6 +244,9 @@ + + 346 + @@ -386,6 +392,9 @@ + + 345 + @@ -473,6 +482,9 @@ + + 344 + @@ -491,6 +503,9 @@ + + 340 + @@ -570,7 +585,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift src_thrift @@ -582,7 +597,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift @@ -638,7 +653,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift Index: ql/src/test/results/compiler/plan/input6.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input6.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input6.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/545048490/63016941.10000.insclause-0 + /tmp/hive-njain/46321599/804999138.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -124,13 +124,16 @@ - /tmp/hive-njain/545048490/63016941.10000.insclause-0 + /tmp/hive-njain/46321599/804999138.10000.insclause-0 + + 335 + @@ -202,6 +205,9 @@ + + 334 + @@ -262,6 +268,9 @@ + + 333 + @@ -301,6 +310,9 @@ + + 332 + @@ -315,7 +327,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 src1 @@ -327,7 +339,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 @@ -379,7 +391,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 Index: ql/src/test/results/compiler/plan/join7.q.xml =================================================================== --- ql/src/test/results/compiler/plan/join7.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/join7.q.xml (working copy) @@ -140,6 +140,9 @@ + + 397 + @@ -207,6 +210,9 @@ + + 389 + @@ -379,6 +385,9 @@ + + 388 + @@ -418,6 +427,9 @@ + + 387 + @@ -552,6 +564,9 @@ + + 396 + @@ -619,6 +634,9 @@ + + 395 + @@ -783,6 +801,9 @@ + + 394 + @@ -822,6 +843,9 @@ + + 393 + @@ -959,6 +983,9 @@ + + 398 + @@ -1026,6 +1053,9 @@ + + 392 + @@ -1190,6 +1220,9 @@ + + 391 + @@ -1229,6 +1262,9 @@ + + 390 + @@ -1249,7 +1285,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src c:a:src1 @@ -1267,7 +1303,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1319,7 +1355,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1349,7 +1385,7 @@ - /tmp/hive-njain/759592261/286929524.10001.insclause-0 + /tmp/hive-njain/442525483/360410586.10001.insclause-0 @@ -1378,6 +1414,9 @@ + + 402 + @@ -1525,6 +1564,9 @@ + + 401 + @@ -1611,6 +1653,9 @@ + + 400 + @@ -1797,6 +1842,9 @@ + + 399 + Index: ql/src/test/results/compiler/plan/input7.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input7.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input7.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/1794861784.10000.insclause-0 + /tmp/hive-njain/220847694.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -124,13 +124,16 @@ - /tmp/hive-njain/1794861784.10000.insclause-0 + /tmp/hive-njain/220847694.10000.insclause-0 + + 382 + @@ -203,6 +206,9 @@ + + 381 + @@ -239,6 +245,9 @@ + + 380 + @@ -268,6 +277,9 @@ + + 377 + @@ -303,7 +315,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 src1 @@ -315,7 +327,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 @@ -367,7 +379,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 Index: ql/src/test/results/compiler/plan/join8.q.xml =================================================================== --- ql/src/test/results/compiler/plan/join8.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/join8.q.xml (working copy) @@ -140,6 +140,9 @@ + + 442 + @@ -207,6 +210,9 @@ + + 437 + @@ -379,6 +385,9 @@ + + 436 + @@ -418,6 +427,9 @@ + + 435 + @@ -552,6 +564,9 @@ + + 441 + @@ -619,6 +634,9 @@ + + 440 + @@ -783,6 +801,9 @@ + + 439 + @@ -822,6 +843,9 @@ + + 438 + @@ -842,7 +866,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src c:a:src1 @@ -857,7 +881,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -909,7 +933,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -943,7 +967,7 @@ - /tmp/hive-njain/19854159/32645100.10001.insclause-0 + /tmp/hive-njain/167142550/1186896485.10001.insclause-0 @@ -972,6 +996,9 @@ + + 447 + @@ -1079,6 +1106,9 @@ + + 446 + @@ -1196,6 +1226,9 @@ + + 445 + @@ -1303,6 +1336,9 @@ + + 444 + @@ -1393,6 +1429,9 @@ + + 443 + Index: ql/src/test/results/compiler/plan/input_testsequencefile.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input_testsequencefile.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input_testsequencefile.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/380325162/471311562.10000.insclause-0 + /tmp/hive-njain/63733327/827696594.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest4_sequencefile + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest4_sequencefile @@ -120,13 +120,16 @@ - /tmp/hive-njain/380325162/471311562.10000.insclause-0 + /tmp/hive-njain/63733327/827696594.10000.insclause-0 + + 431 + @@ -198,6 +201,9 @@ + + 430 + @@ -216,6 +222,9 @@ + + 429 + @@ -251,7 +260,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -263,7 +272,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -315,7 +324,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/input8.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input8.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input8.q.xml (working copy) @@ -26,7 +26,7 @@ - /tmp/hive-njain/590666906.10001.insclause-0 + /tmp/hive-njain/396905548.10001.insclause-0 @@ -55,6 +55,9 @@ + + 424 + @@ -281,6 +284,9 @@ + + 423 + @@ -317,6 +323,9 @@ + + 422 + @@ -346,6 +355,9 @@ + + 419 + @@ -381,7 +393,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 src1 @@ -393,7 +405,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 @@ -445,7 +457,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 Index: ql/src/test/results/compiler/plan/input9.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input9.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input9.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/483179349.10000.insclause-0 + /tmp/hive-njain/480466534.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -128,13 +128,16 @@ - /tmp/hive-njain/483179349.10000.insclause-0 + /tmp/hive-njain/480466534.10000.insclause-0 + + 486 + @@ -207,6 +210,9 @@ + + 485 + @@ -274,6 +280,9 @@ + + 484 + @@ -321,6 +330,9 @@ + + 483 + @@ -339,6 +351,9 @@ + + 479 + @@ -374,7 +389,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 src1 @@ -386,7 +401,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 @@ -438,7 +453,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src1 Index: ql/src/test/results/compiler/plan/union.q.xml =================================================================== --- ql/src/test/results/compiler/plan/union.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/union.q.xml (working copy) @@ -28,7 +28,7 @@ true - /tmp/hive-njain/1238482884/612877942.10000.insclause-0 + /tmp/hive-njain/143081119/715558313.10000.insclause-0 ../build/ql/test/data/warehouse/union.out @@ -79,7 +79,7 @@ - /tmp/hive-njain/1238482884/612877942.10000.insclause-0 + /tmp/hive-njain/143081119/715558313.10000.insclause-0 @@ -108,6 +108,9 @@ + + 469 + @@ -182,6 +185,9 @@ + + 468 + @@ -200,6 +206,9 @@ + + 467 + @@ -241,6 +250,9 @@ + + 466 + @@ -311,6 +323,9 @@ + + 465 + @@ -322,6 +337,9 @@ + + 464 + @@ -457,6 +475,9 @@ + + 463 + @@ -533,6 +554,9 @@ + + 462 + @@ -572,6 +596,9 @@ + + 461 + @@ -590,7 +617,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src null-subquery1:unioninput-subquery1:src @@ -605,7 +632,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -657,7 +684,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/udf1.q.xml =================================================================== --- ql/src/test/results/compiler/plan/udf1.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/udf1.q.xml (working copy) @@ -30,7 +30,7 @@ - /tmp/hive-njain/487094769.10001.insclause-0 + /tmp/hive-njain/753951849.10001.insclause-0 @@ -59,6 +59,9 @@ + + 499 + @@ -1115,6 +1118,9 @@ + + 498 + @@ -1188,6 +1194,9 @@ + + 497 + @@ -1235,6 +1244,9 @@ + + 496 + @@ -1253,6 +1265,9 @@ + + 492 + @@ -1288,7 +1303,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -1300,7 +1315,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1352,7 +1367,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/udf4.q.xml =================================================================== --- ql/src/test/results/compiler/plan/udf4.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/udf4.q.xml (working copy) @@ -26,7 +26,7 @@ - /tmp/hive-njain/1170725444.10001.insclause-0 + /tmp/hive-njain/643760741.10001.insclause-0 @@ -55,6 +55,9 @@ + + 510 + @@ -920,6 +923,9 @@ + + 509 + @@ -945,6 +951,9 @@ + + 508 + @@ -959,6 +968,9 @@ + + 505 + @@ -998,7 +1010,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 dest1 @@ -1010,7 +1022,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -1062,7 +1074,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 Index: ql/src/test/results/compiler/plan/input_testxpath.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input_testxpath.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input_testxpath.q.xml (working copy) @@ -26,7 +26,7 @@ - /tmp/hive-njain/1163598770.10001.insclause-0 + /tmp/hive-njain/1615725785.10001.insclause-0 @@ -55,6 +55,9 @@ + + 520 + @@ -229,6 +232,9 @@ + + 519 + @@ -285,6 +291,9 @@ + + 518 + @@ -334,6 +343,9 @@ + + 515 + @@ -413,7 +425,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift src_thrift @@ -425,7 +437,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift @@ -481,7 +493,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift Index: ql/src/test/results/compiler/plan/input_part1.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input_part1.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input_part1.q.xml (working copy) @@ -26,7 +26,7 @@ - /tmp/hive-njain/381790525/715994016.10001.insclause-0 + /tmp/hive-njain/619850810/470919718.10001.insclause-0 @@ -55,6 +55,9 @@ + + 528 + @@ -166,6 +169,9 @@ + + 527 + @@ -391,6 +397,9 @@ + + 526 + @@ -450,6 +459,9 @@ + + 525 + @@ -464,7 +476,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcpart/ds=2008-04-08/hr=12 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcpart/ds=2008-04-08/hr=12 srcpart @@ -476,7 +488,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcpart/ds=2008-04-08/hr=12 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcpart/ds=2008-04-08/hr=12 @@ -541,7 +553,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcpart + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcpart Index: ql/src/test/results/compiler/plan/groupby1.q.xml =================================================================== --- ql/src/test/results/compiler/plan/groupby1.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/groupby1.q.xml (working copy) @@ -35,7 +35,7 @@ true - /tmp/hive-njain/1734876980/99648103.10000.insclause-0 + /tmp/hive-njain/668629165/279955859.10000.insclause-0 @@ -84,7 +84,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -118,7 +118,7 @@ - /tmp/hive-njain/1734876980/99648103.10001 + /tmp/hive-njain/668629165/279955859.10001 @@ -234,6 +234,9 @@ + + 536 + @@ -245,7 +248,7 @@ - /tmp/hive-njain/1734876980/99648103.10001 + /tmp/hive-njain/668629165/279955859.10001 @@ -278,6 +281,9 @@ + + 540 + @@ -389,6 +395,9 @@ + + 535 + @@ -557,6 +566,9 @@ + + 534 + @@ -568,6 +580,9 @@ + + 533 + @@ -680,10 +695,10 @@ - /tmp/hive-njain/1734876980/99648103.10001 + /tmp/hive-njain/668629165/279955859.10001 - /tmp/hive-njain/1734876980/99648103.10001 + /tmp/hive-njain/668629165/279955859.10001 @@ -692,7 +707,7 @@ - /tmp/hive-njain/1734876980/99648103.10001 + /tmp/hive-njain/668629165/279955859.10001 @@ -714,13 +729,16 @@ - /tmp/hive-njain/1734876980/99648103.10000.insclause-0 + /tmp/hive-njain/668629165/279955859.10000.insclause-0 + + 539 + @@ -788,6 +806,9 @@ + + 538 + @@ -854,6 +875,9 @@ + + 537 + @@ -923,7 +947,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -935,7 +959,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -987,7 +1011,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/groupby2.q.xml =================================================================== --- ql/src/test/results/compiler/plan/groupby2.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/groupby2.q.xml (working copy) @@ -20,7 +20,7 @@ - /tmp/hive-njain/568944209/29322851.10002 + /tmp/hive-njain/769927646/405719043.10002 @@ -150,6 +150,9 @@ + + 552 + @@ -161,7 +164,7 @@ - /tmp/hive-njain/568944209/29322851.10002 + /tmp/hive-njain/769927646/405719043.10002 @@ -194,6 +197,9 @@ + + 556 + @@ -339,6 +345,9 @@ + + 551 + @@ -536,6 +545,9 @@ + + 550 + @@ -547,6 +559,9 @@ + + 549 + @@ -669,10 +684,10 @@ - /tmp/hive-njain/568944209/29322851.10002 + /tmp/hive-njain/769927646/405719043.10002 - /tmp/hive-njain/568944209/29322851.10002 + /tmp/hive-njain/769927646/405719043.10002 @@ -681,7 +696,7 @@ - /tmp/hive-njain/568944209/29322851.10002 + /tmp/hive-njain/769927646/405719043.10002 @@ -703,7 +718,7 @@ - /tmp/hive-njain/568944209/29322851.10001.insclause-0 + /tmp/hive-njain/769927646/405719043.10001.insclause-0 @@ -732,6 +747,9 @@ + + 555 + @@ -880,6 +898,9 @@ + + 554 + @@ -967,6 +988,9 @@ + + 553 + @@ -1046,7 +1070,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -1058,7 +1082,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1110,7 +1134,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/groupby3.q.xml =================================================================== --- ql/src/test/results/compiler/plan/groupby3.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/groupby3.q.xml (working copy) @@ -20,7 +20,7 @@ - /tmp/hive-zshao/1268121/343796403.10002 + /tmp/hive-njain/202951994/659800629.10002 @@ -165,6 +165,9 @@ + + 575 + @@ -176,7 +179,7 @@ - /tmp/hive-zshao/1268121/343796403.10002 + /tmp/hive-njain/202951994/659800629.10002 @@ -209,6 +212,9 @@ + + 579 + @@ -522,6 +528,9 @@ + + 574 + @@ -659,6 +668,9 @@ + + 573 + @@ -688,6 +700,9 @@ + + 572 + @@ -699,6 +714,9 @@ + + 565 + @@ -853,10 +871,10 @@ - /tmp/hive-zshao/1268121/343796403.10002 + /tmp/hive-njain/202951994/659800629.10002 - /tmp/hive-zshao/1268121/343796403.10002 + /tmp/hive-njain/202951994/659800629.10002 @@ -865,7 +883,7 @@ - /tmp/hive-zshao/1268121/343796403.10002 + /tmp/hive-njain/202951994/659800629.10002 @@ -887,7 +905,7 @@ - /tmp/hive-zshao/147248168.10001.insclause-0 + /tmp/hive-njain/263565056.10001.insclause-0 @@ -916,6 +934,9 @@ + + 578 + @@ -1043,6 +1064,9 @@ + + 577 + @@ -1182,6 +1206,9 @@ + + 576 + @@ -1281,7 +1308,7 @@ - file:/data/users/zshao/sync/apache-trunk-HIVE-104/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -1293,7 +1320,7 @@ - file:/data/users/zshao/sync/apache-trunk-HIVE-104/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -1345,7 +1372,7 @@ location - file:/data/users/zshao/sync/apache-trunk-HIVE-104/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/subq.q.xml =================================================================== --- ql/src/test/results/compiler/plan/subq.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/subq.q.xml (working copy) @@ -28,7 +28,7 @@ true - /tmp/hive-njain/276583968/36258042.10000.insclause-0 + /tmp/hive-njain/1317058041/584980783.10000.insclause-0 ../build/ql/test/data/warehouse/union.out @@ -75,7 +75,7 @@ - /tmp/hive-njain/276583968/36258042.10000.insclause-0 + /tmp/hive-njain/1317058041/584980783.10000.insclause-0 @@ -104,6 +104,9 @@ + + 593 + @@ -178,6 +181,9 @@ + + 592 + @@ -227,6 +233,9 @@ + + 591 + @@ -325,6 +334,9 @@ + + 590 + @@ -364,6 +376,9 @@ + + 589 + @@ -378,7 +393,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src unioninput:src @@ -390,7 +405,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -442,7 +457,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/groupby4.q.xml =================================================================== --- ql/src/test/results/compiler/plan/groupby4.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/groupby4.q.xml (working copy) @@ -20,7 +20,7 @@ - /tmp/hive-njain/270959803/34104799.10002 + /tmp/hive-njain/178135303/343512600.10002 @@ -121,6 +121,9 @@ + + 609 + @@ -132,7 +135,7 @@ - /tmp/hive-njain/270959803/34104799.10002 + /tmp/hive-njain/178135303/343512600.10002 @@ -165,6 +168,9 @@ + + 613 + @@ -220,6 +226,9 @@ + + 608 + @@ -394,6 +403,9 @@ + + 607 + @@ -423,6 +435,9 @@ + + 606 + @@ -434,6 +449,9 @@ + + 599 + @@ -548,10 +566,10 @@ - /tmp/hive-njain/270959803/34104799.10002 + /tmp/hive-njain/178135303/343512600.10002 - /tmp/hive-njain/270959803/34104799.10002 + /tmp/hive-njain/178135303/343512600.10002 @@ -560,7 +578,7 @@ - /tmp/hive-njain/270959803/34104799.10002 + /tmp/hive-njain/178135303/343512600.10002 @@ -582,7 +600,7 @@ - /tmp/hive-njain/648245175.10001.insclause-0 + /tmp/hive-njain/174939905.10001.insclause-0 @@ -611,6 +629,9 @@ + + 612 + @@ -658,6 +679,9 @@ + + 611 + @@ -702,6 +726,9 @@ + + 610 + @@ -761,7 +788,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -773,7 +800,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -825,7 +852,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/groupby5.q.xml =================================================================== --- ql/src/test/results/compiler/plan/groupby5.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/groupby5.q.xml (working copy) @@ -20,7 +20,7 @@ - /tmp/hive-njain/25539710/241360638.10002 + /tmp/hive-njain/587764946/104967884.10002 @@ -136,6 +136,9 @@ + + 626 + @@ -147,7 +150,7 @@ - /tmp/hive-njain/25539710/241360638.10002 + /tmp/hive-njain/587764946/104967884.10002 @@ -180,6 +183,9 @@ + + 630 + @@ -291,6 +297,9 @@ + + 625 + @@ -459,6 +468,9 @@ + + 624 + @@ -470,6 +482,9 @@ + + 623 + @@ -582,10 +597,10 @@ - /tmp/hive-njain/25539710/241360638.10002 + /tmp/hive-njain/587764946/104967884.10002 - /tmp/hive-njain/25539710/241360638.10002 + /tmp/hive-njain/587764946/104967884.10002 @@ -594,7 +609,7 @@ - /tmp/hive-njain/25539710/241360638.10002 + /tmp/hive-njain/587764946/104967884.10002 @@ -616,7 +631,7 @@ - /tmp/hive-njain/25539710/241360638.10001.insclause-0 + /tmp/hive-njain/587764946/104967884.10001.insclause-0 @@ -645,6 +660,9 @@ + + 629 + @@ -712,6 +730,9 @@ + + 628 + @@ -778,6 +799,9 @@ + + 627 + @@ -847,7 +871,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -859,7 +883,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -911,7 +935,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/groupby6.q.xml =================================================================== --- ql/src/test/results/compiler/plan/groupby6.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/groupby6.q.xml (working copy) @@ -20,7 +20,7 @@ - /tmp/hive-njain/1062373643/636855904.10002 + /tmp/hive-njain/1079764031/22446656.10002 @@ -121,6 +121,9 @@ + + 649 + @@ -132,7 +135,7 @@ - /tmp/hive-njain/1062373643/636855904.10002 + /tmp/hive-njain/1079764031/22446656.10002 @@ -165,6 +168,9 @@ + + 653 + @@ -220,6 +226,9 @@ + + 648 + @@ -394,6 +403,9 @@ + + 647 + @@ -423,6 +435,9 @@ + + 646 + @@ -434,6 +449,9 @@ + + 639 + @@ -548,10 +566,10 @@ - /tmp/hive-njain/1062373643/636855904.10002 + /tmp/hive-njain/1079764031/22446656.10002 - /tmp/hive-njain/1062373643/636855904.10002 + /tmp/hive-njain/1079764031/22446656.10002 @@ -560,7 +578,7 @@ - /tmp/hive-njain/1062373643/636855904.10002 + /tmp/hive-njain/1079764031/22446656.10002 @@ -582,7 +600,7 @@ - /tmp/hive-njain/786081691.10001.insclause-0 + /tmp/hive-njain/273976586.10001.insclause-0 @@ -611,6 +629,9 @@ + + 652 + @@ -658,6 +679,9 @@ + + 651 + @@ -702,6 +726,9 @@ + + 650 + @@ -761,7 +788,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -773,7 +800,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -825,7 +852,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/case_sensitivity.q.xml =================================================================== --- ql/src/test/results/compiler/plan/case_sensitivity.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/case_sensitivity.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/1375367896.10000.insclause-0 + /tmp/hive-njain/565480789.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -128,13 +128,16 @@ - /tmp/hive-njain/1375367896.10000.insclause-0 + /tmp/hive-njain/565480789.10000.insclause-0 + + 7 + @@ -265,6 +268,9 @@ + + 6 + @@ -355,6 +361,9 @@ + + 5 + @@ -422,6 +431,9 @@ + + 4 + @@ -440,6 +452,9 @@ + + 0 + @@ -526,7 +541,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift src_thrift @@ -538,7 +553,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift @@ -594,7 +609,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src_thrift + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src_thrift Index: ql/src/test/results/compiler/plan/input20.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input20.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input20.q.xml (working copy) @@ -155,6 +155,9 @@ + + 24 + @@ -255,6 +258,9 @@ + + 23 + @@ -479,6 +485,9 @@ + + 22 + @@ -536,6 +545,9 @@ + + 21 + @@ -565,6 +577,9 @@ + + 13 + @@ -603,7 +618,7 @@ - file:/home/njain/workspace/fbhadoop/VENDOR/hadoop-0.17/build/contrib/hive/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src tmap:src @@ -615,7 +630,7 @@ - file:/home/njain/workspace/fbhadoop/VENDOR/hadoop-0.17/build/contrib/hive/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -667,7 +682,7 @@ location - file:/home/njain/workspace/fbhadoop/VENDOR/hadoop-0.17/build/contrib/hive/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -697,7 +712,7 @@ - /tmp/hive-njain/307350069.10001.insclause-0 + /tmp/hive-njain/260382224.10001.insclause-0 @@ -726,6 +741,9 @@ + + 28 + @@ -822,6 +840,9 @@ + + 27 + @@ -868,6 +889,9 @@ + + 26 + @@ -921,6 +945,9 @@ + + 25 + Index: ql/src/test/results/compiler/plan/sample1.q.xml =================================================================== --- ql/src/test/results/compiler/plan/sample1.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/sample1.q.xml (working copy) @@ -30,7 +30,7 @@ - /tmp/hive-njain/425404034/89912765.10001.insclause-0 + /tmp/hive-njain/267461718/346290702.10001.insclause-0 @@ -59,6 +59,9 @@ + + 42 + @@ -173,6 +176,9 @@ + + 41 + @@ -320,6 +326,9 @@ + + 40 + @@ -545,6 +554,9 @@ + + 39 + @@ -556,6 +568,9 @@ + + 38 + @@ -570,7 +585,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcpart/ds=2008-04-08/hr=11 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcpart/ds=2008-04-08/hr=11 s @@ -582,7 +597,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcpart/ds=2008-04-08/hr=11 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcpart/ds=2008-04-08/hr=11 @@ -647,7 +662,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcpart + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcpart Index: ql/src/test/results/compiler/plan/sample2.q.xml =================================================================== --- ql/src/test/results/compiler/plan/sample2.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/sample2.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/20107464/1379933163.10000.insclause-0 + /tmp/hive-njain/96340219/63801024.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -120,13 +120,16 @@ - /tmp/hive-njain/20107464/1379933163.10000.insclause-0 + /tmp/hive-njain/96340219/63801024.10000.insclause-0 + + 50 + @@ -201,6 +204,9 @@ + + 49 + @@ -219,6 +225,9 @@ + + 48 + @@ -254,7 +263,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt s @@ -266,7 +275,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt @@ -322,7 +331,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket Index: ql/src/test/results/compiler/plan/sample3.q.xml =================================================================== --- ql/src/test/results/compiler/plan/sample3.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/sample3.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/1789469168/381631340.10000.insclause-0 + /tmp/hive-njain/430081353/168881313.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -124,13 +124,16 @@ - /tmp/hive-njain/1789469168/381631340.10000.insclause-0 + /tmp/hive-njain/430081353/168881313.10000.insclause-0 + + 57 + @@ -205,6 +208,9 @@ + + 56 + @@ -393,6 +399,9 @@ + + 55 + @@ -404,6 +413,9 @@ + + 54 + @@ -439,7 +451,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket s @@ -451,7 +463,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket @@ -507,7 +519,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket Index: ql/src/test/results/compiler/plan/sample4.q.xml =================================================================== --- ql/src/test/results/compiler/plan/sample4.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/sample4.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/1853542808/45744403.10000.insclause-0 + /tmp/hive-njain/114769143/49552343.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -120,13 +120,16 @@ - /tmp/hive-njain/1853542808/45744403.10000.insclause-0 + /tmp/hive-njain/114769143/49552343.10000.insclause-0 + + 64 + @@ -201,6 +204,9 @@ + + 63 + @@ -219,6 +225,9 @@ + + 62 + @@ -254,7 +263,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt s @@ -266,7 +275,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt @@ -322,7 +331,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket Index: ql/src/test/results/compiler/plan/sample5.q.xml =================================================================== --- ql/src/test/results/compiler/plan/sample5.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/sample5.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/824806517/591440948.10000.insclause-0 + /tmp/hive-njain/1464571668/24847030.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -124,13 +124,16 @@ - /tmp/hive-njain/824806517/591440948.10000.insclause-0 + /tmp/hive-njain/1464571668/24847030.10000.insclause-0 + + 71 + @@ -205,6 +208,9 @@ + + 70 + @@ -380,6 +386,9 @@ + + 69 + @@ -391,6 +400,9 @@ + + 68 + @@ -426,7 +438,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket s @@ -438,7 +450,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket @@ -494,7 +506,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket Index: ql/src/test/results/compiler/plan/sample6.q.xml =================================================================== --- ql/src/test/results/compiler/plan/sample6.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/sample6.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/814020855/624762724.10000.insclause-0 + /tmp/hive-njain/298582643/456790524.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -124,13 +124,16 @@ - /tmp/hive-njain/814020855/624762724.10000.insclause-0 + /tmp/hive-njain/298582643/456790524.10000.insclause-0 + + 79 + @@ -205,6 +208,9 @@ + + 78 + @@ -380,6 +386,9 @@ + + 77 + @@ -391,6 +400,9 @@ + + 76 + @@ -426,7 +438,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt s @@ -438,7 +450,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt @@ -494,7 +506,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket Index: ql/src/test/results/compiler/plan/sample7.q.xml =================================================================== --- ql/src/test/results/compiler/plan/sample7.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/sample7.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/475551879/391349136.10000.insclause-0 + /tmp/hive-njain/499856959/155510880.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -128,13 +128,16 @@ - /tmp/hive-njain/475551879/391349136.10000.insclause-0 + /tmp/hive-njain/499856959/155510880.10000.insclause-0 + + 88 + @@ -209,6 +212,9 @@ + + 87 + @@ -286,6 +292,9 @@ + + 86 + @@ -474,6 +483,9 @@ + + 85 + @@ -485,6 +497,9 @@ + + 84 + @@ -499,7 +514,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt s @@ -511,7 +526,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket/kv1.txt @@ -567,7 +582,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/srcbucket + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/srcbucket Index: ql/src/test/results/compiler/plan/cast1.q.xml =================================================================== --- ql/src/test/results/compiler/plan/cast1.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/cast1.q.xml (working copy) @@ -30,7 +30,7 @@ - /tmp/hive-njain/802827123.10001.insclause-0 + /tmp/hive-njain/1080786704.10001.insclause-0 @@ -59,6 +59,9 @@ + + 101 + @@ -543,6 +546,9 @@ + + 100 + @@ -616,6 +622,9 @@ + + 99 + @@ -663,6 +672,9 @@ + + 98 + @@ -681,6 +693,9 @@ + + 94 + @@ -716,7 +731,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -728,7 +743,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -780,7 +795,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/results/compiler/plan/join1.q.xml =================================================================== --- ql/src/test/results/compiler/plan/join1.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/join1.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/605771515.10000.insclause-0 + /tmp/hive-njain/1011362457.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -230,6 +230,9 @@ + + 116 + @@ -269,6 +272,9 @@ + + 107 + @@ -410,6 +416,9 @@ + + 115 + @@ -457,6 +466,9 @@ + + 114 + @@ -486,6 +498,9 @@ + + 108 + @@ -527,7 +542,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src2 @@ -542,7 +557,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -594,7 +609,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -620,13 +635,16 @@ - /tmp/hive-njain/605771515.10000.insclause-0 + /tmp/hive-njain/1011362457.10000.insclause-0 + + 119 + @@ -694,6 +712,9 @@ + + 118 + @@ -771,6 +792,9 @@ + + 117 + Index: ql/src/test/results/compiler/plan/input1.q.xml =================================================================== --- ql/src/test/results/compiler/plan/input1.q.xml (revision 729990) +++ ql/src/test/results/compiler/plan/input1.q.xml (working copy) @@ -31,7 +31,7 @@ true - /tmp/hive-njain/202548334/480112542.10000.insclause-0 + /tmp/hive-njain/58217631/16881291.10000.insclause-0 @@ -80,7 +80,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/dest1 + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/dest1 @@ -124,13 +124,16 @@ - /tmp/hive-njain/202548334/480112542.10000.insclause-0 + /tmp/hive-njain/58217631/16881291.10000.insclause-0 + + 131 + @@ -202,6 +205,9 @@ + + 130 + @@ -279,6 +285,9 @@ + + 129 + @@ -318,6 +327,9 @@ + + 128 + @@ -332,7 +344,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src src @@ -344,7 +356,7 @@ - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src @@ -396,7 +408,7 @@ location - file:/home/njain/workspace/hadoophive/trunk/build/ql/test/data/warehouse/src + file:/home/njain/workspace/hadoophive4/trunk/build/ql/test/data/warehouse/src Index: ql/src/test/queries/clientpositive/join2_map.q =================================================================== --- ql/src/test/queries/clientpositive/join2_map.q (revision 0) +++ ql/src/test/queries/clientpositive/join2_map.q (revision 0) @@ -0,0 +1,5 @@ +explain +select /*+ MAPJOIN(src1) */ src1.* FROM srcpart src1 JOIN srcpart src2 ON src1.key = src2.key WHERE src1.ds='2008-04-08' and src2.ds='2008-04-08'; + +select /*+ MAPJOIN(src1) */ src1.* FROM srcpart src1 JOIN srcpart src2 ON src1.key = src2.key WHERE src1.ds='2008-04-08' and src2.ds='2008-04-08'; + Index: ql/src/test/queries/clientpositive/join6_map.q =================================================================== --- ql/src/test/queries/clientpositive/join6_map.q (revision 0) +++ ql/src/test/queries/clientpositive/join6_map.q (revision 0) @@ -0,0 +1,4 @@ +explain +select /*+ MAPJOIN(src1, src3) */ src1.* FROM src src1 JOIN src src2 ON src1.key = src2.key JOIN src src3 on src1.key + src1.key = src3.key; + +select /*+ MAPJOIN(src1, src3) */ src1.* FROM src src1 JOIN src src2 ON src1.key = src2.key JOIN src src3 on src1.key + src1.key = src3.key; Index: ql/src/test/queries/clientpositive/join1_map.q =================================================================== --- ql/src/test/queries/clientpositive/join1_map.q (revision 0) +++ ql/src/test/queries/clientpositive/join1_map.q (revision 0) @@ -0,0 +1,4 @@ +explain +select /*+ MAPJOIN(src1) */ src1.* FROM src src1 JOIN src src2 ON src1.key = src2.key; + +select /*+ MAPJOIN(src1) */ src1.* FROM src src1 JOIN src src2 ON src1.key = src2.key; Index: ql/src/test/queries/clientpositive/join4_map.q =================================================================== --- ql/src/test/queries/clientpositive/join4_map.q (revision 0) +++ ql/src/test/queries/clientpositive/join4_map.q (revision 0) @@ -0,0 +1,5 @@ +explain +select /*+ MAPJOIN(src1, src2) */ src1.* FROM src src1 JOIN src src2 ON src1.key = src2.key AND src1.key < 10 JOIN src src3 on src1.key = src3.key ; + +select /*+ MAPJOIN(src1, src2) */ src1.* FROM src src1 JOIN src src2 ON src1.key = src2.key AND src1.key < 10 JOIN src src3 on src1.key = src3.key ; + Index: ql/src/test/queries/clientpositive/join3_map.q =================================================================== --- ql/src/test/queries/clientpositive/join3_map.q (revision 0) +++ ql/src/test/queries/clientpositive/join3_map.q (revision 0) @@ -0,0 +1,4 @@ +explain +select /*+ MAPJOIN(src1) */ src1.* FROM src src1 JOIN src src2 ON src1.key = src2.key AND src1.key < 100; + +select /*+ MAPJOIN(src1) */ src1.* FROM src src1 JOIN src src2 ON src1.key = src2.key AND src1.key < 100; Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRProcContext.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRProcContext.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRProcContext.java (working copy) @@ -33,6 +33,7 @@ import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; import org.apache.hadoop.hive.ql.exec.FileSinkOperator; import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.exec.JoinOperator; @@ -99,7 +100,8 @@ return currAliasId; } } - + + private Map mapJoinOpMap; private HashMap, Task> opTaskMap; private List> seenOps; @@ -151,6 +153,7 @@ currAliasId = null; rootOps = new ArrayList>(); rootOps.addAll(parseCtx.getTopOps().values()); + mapJoinOpMap = new HashMap(); } /** @@ -334,4 +337,11 @@ public void setCurrAliasId(String currAliasId) { this.currAliasId = currAliasId; } + + /** + * @return current map join operator + */ + public Map getMapJoinOpMap() { + return mapJoinOpMap; + } } Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink1.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink1.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink1.java (working copy) @@ -73,7 +73,7 @@ // This will happen in case of joins. The current plan can be thrown away after being merged with the // original plan else { - GenMapRedUtils.joinPlan(op, null, opMapTask, ctx); + GenMapRedUtils.joinPlan(op, null, opMapTask, ctx, false); currTask = opMapTask; ctx.setCurrTask(currTask); } Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink2.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink2.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRRedSink2.java (working copy) @@ -63,7 +63,7 @@ if (opMapTask == null) GenMapRedUtils.splitPlan(op, ctx); else { - GenMapRedUtils.joinPlan(op, currTask, opMapTask, ctx); + GenMapRedUtils.joinPlan(op, currTask, opMapTask, ctx, false); currTask = opMapTask; ctx.setCurrTask(currTask); } Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink1.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink1.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink1.java (revision 0) @@ -0,0 +1,112 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.optimizer; + +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Set; +import java.util.Stack; +import java.io.Serializable; +import java.io.File; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.MapSinkOperator; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; +import org.apache.hadoop.hive.ql.exec.Task; +import org.apache.hadoop.hive.ql.exec.TaskFactory; +import org.apache.hadoop.hive.ql.exec.OperatorFactory; +import org.apache.hadoop.hive.ql.plan.mapredWork; +import org.apache.hadoop.hive.ql.plan.mapSinkDesc; +import org.apache.hadoop.hive.ql.metadata.*; +import org.apache.hadoop.hive.ql.exec.Utilities; +import org.apache.hadoop.hive.ql.lib.Node; +import org.apache.hadoop.hive.ql.lib.NodeProcessor; +import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx; +import org.apache.hadoop.hive.ql.parse.SemanticException; +import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMapRedCtx; + +/** + * Processor for the rule - table scan followed by map sink + */ +public class GenMRMapSink1 implements NodeProcessor { + + public GenMRMapSink1() { + } + + /** + * Map Sink encountered + * @param op the map sink operator encountered + * @param opProcCtx context + */ + public void process(Node nd, NodeProcessorCtx opProcCtx) throws SemanticException { + MapSinkOperator op = (MapSinkOperator)nd; + GenMRProcContext ctx = (GenMRProcContext)opProcCtx; + Map, GenMapRedCtx> mapCurrCtx = ctx.getMapCurrCtx(); + GenMapRedCtx mapredCtx = mapCurrCtx.get(op.getParentOperators().get(0)); + Task currTask = mapredCtx.getCurrTask(); + mapredWork currPlan = (mapredWork) currTask.getWork(); + Operator currTopOp = mapredCtx.getCurrTopOp(); + String currAliasId = mapredCtx.getCurrAliasId(); + + ctx.setCurrTopOp(currTopOp); + ctx.setCurrAliasId(currAliasId); + ctx.setCurrTask(currTask); + + HashMap, Task> opTaskMap = ctx.getOpTaskMap(); + MapJoinOperator mapJoinOp = (MapJoinOperator)op.getChildOperators().get(0); + Task opMapTask = opTaskMap.get(mapJoinOp); + + // If the plan for this map join operator does not exist, initialize the plan + if (opMapTask == null) { + if (op.getConf().isDummy()) { + GenMapRedUtils.initPlan(op, ctx, false, true); + } + else { + GenMapRedUtils.initPlan(op, ctx, true, true); + } + } + // The current plan can be thrown away after being merged with the original plan + else { + GenMapRedUtils.joinPlan(null, null, opMapTask, ctx, !op.getConf().isDummy()); + currTask = opMapTask; + } + + Map mapJoinOpMap = ctx.getMapJoinOpMap(); + Integer num = mapJoinOpMap.get(mapJoinOp); + if (num == null) + mapJoinOpMap.put(mapJoinOp, new Integer(1)); + else + mapJoinOpMap.put(mapJoinOp, new Integer(num.intValue() + 1)); + + num = mapJoinOpMap.get(mapJoinOp); + if (num.intValue() == mapJoinOp.getParentOperators().size()) { + ((mapredWork)currTask.getWork()).setReducer(null); + opTaskMap.remove(mapJoinOp); + } + + mapCurrCtx.put(op, new GenMapRedCtx(ctx.getCurrTask(), ctx.getCurrTopOp(), ctx.getCurrAliasId())); + } + +} Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink2.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink2.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink2.java (revision 0) @@ -0,0 +1,90 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.optimizer; + +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Set; +import java.util.Stack; +import java.io.Serializable; +import java.io.File; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.MapSinkOperator; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; +import org.apache.hadoop.hive.ql.exec.Task; +import org.apache.hadoop.hive.ql.exec.TaskFactory; +import org.apache.hadoop.hive.ql.exec.OperatorFactory; +import org.apache.hadoop.hive.ql.plan.mapredWork; +import org.apache.hadoop.hive.ql.plan.mapSinkDesc; +import org.apache.hadoop.hive.ql.metadata.*; +import org.apache.hadoop.hive.ql.exec.Utilities; +import org.apache.hadoop.hive.ql.lib.Node; +import org.apache.hadoop.hive.ql.lib.NodeProcessor; +import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx; +import org.apache.hadoop.hive.ql.parse.SemanticException; +import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMapRedCtx; + +/** + * Processor for the rule - map sink followed by map sink + */ +public class GenMRMapSink2 implements NodeProcessor { + + public GenMRMapSink2() { + } + + /** + * Map Sink encountered + * @param op the map sink operator encountered + * @param opProcCtx context + */ + public void process(Node nd, NodeProcessorCtx opProcCtx) throws SemanticException { + MapSinkOperator op = (MapSinkOperator)nd; + GenMRProcContext ctx = (GenMRProcContext)opProcCtx; + + Map, GenMapRedCtx> mapCurrCtx = ctx.getMapCurrCtx(); + GenMapRedCtx mapredCtx = mapCurrCtx.get(op.getParentOperators().get(0)); + Task currTask = mapredCtx.getCurrTask(); + mapredWork currPlan = (mapredWork) currTask.getWork(); + Operator currTopOp = mapredCtx.getCurrTopOp(); + String currAliasId = mapredCtx.getCurrAliasId(); + + ctx.setCurrTopOp(currTopOp); + ctx.setCurrAliasId(currAliasId); + ctx.setCurrTask(currTask); + + HashMap, Task> opTaskMap = ctx.getOpTaskMap(); + MapJoinOperator mapJoinOp = (MapJoinOperator)op.getChildOperators().get(0); + assert opTaskMap.get(mapJoinOp) == null; + assert op.getConf().isDummy() == true; + + GenMapRedUtils.initPlan(op, ctx, true, false); + + Map mapJoinOpMap = ctx.getMapJoinOpMap(); + assert mapJoinOpMap.get(mapJoinOp) == null; + mapJoinOpMap.put(mapJoinOp, new Integer(1)); + mapCurrCtx.put(op, new GenMapRedCtx(ctx.getCurrTask(), ctx.getCurrTopOp(), ctx.getCurrAliasId())); + } +} Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink3.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink3.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRMapSink3.java (revision 0) @@ -0,0 +1,90 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.optimizer; + +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Set; +import java.util.Stack; +import java.io.Serializable; +import java.io.File; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.MapSinkOperator; +import org.apache.hadoop.hive.ql.exec.Task; +import org.apache.hadoop.hive.ql.exec.TaskFactory; +import org.apache.hadoop.hive.ql.exec.OperatorFactory; +import org.apache.hadoop.hive.ql.plan.mapredWork; +import org.apache.hadoop.hive.ql.plan.mapSinkDesc; +import org.apache.hadoop.hive.ql.metadata.*; +import org.apache.hadoop.hive.ql.exec.Utilities; +import org.apache.hadoop.hive.ql.lib.Node; +import org.apache.hadoop.hive.ql.lib.NodeProcessor; +import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx; +import org.apache.hadoop.hive.ql.parse.SemanticException; +import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMapRedCtx; + +/** + * Processor for the rule - reduce sink followed by map sink + */ +public class GenMRMapSink3 implements NodeProcessor { + + public GenMRMapSink3() { + } + + /** + * Map Sink encountered + * @param op the map sink operator encountered + * @param opProcCtx context + */ + public void process(Node nd, NodeProcessorCtx opProcCtx) throws SemanticException { + MapSinkOperator op = (MapSinkOperator)nd; + GenMRProcContext ctx = (GenMRProcContext)opProcCtx; + Map, GenMapRedCtx> mapCurrCtx = ctx.getMapCurrCtx(); + GenMapRedCtx mapredCtx = mapCurrCtx.get(op.getParentOperators().get(0)); + + Task currTask = mapredCtx.getCurrTask(); + Operator currTopOp = mapredCtx.getCurrTopOp(); + String currAliasId = mapredCtx.getCurrAliasId(); + Operator reducer = op.getChildOperators().get(0); + Map, Task> opTaskMap = ctx.getOpTaskMap(); + Task opMapTask = opTaskMap.get(reducer); + + ctx.setCurrTopOp(currTopOp); + ctx.setCurrAliasId(currAliasId); + ctx.setCurrTask(currTask); + + if (opMapTask == null) + GenMapRedUtils.splitPlan(op, ctx); + else { + GenMapRedUtils.joinPlan(null, null, opMapTask, ctx, !op.getConf().isDummy()); + currTask = opMapTask; + ctx.setCurrTask(currTask); + } + + mapCurrCtx.put(op, new GenMapRedCtx(ctx.getCurrTask(), ctx.getCurrTopOp(), ctx.getCurrAliasId())); + } + +} Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRFileSink1.java (working copy) @@ -60,7 +60,7 @@ // Set the move task to be dependent on the current task if (mvTask != null) ret = currTask.addDependentTask(mvTask); - + // In case of multi-table insert, the path to alias mapping is needed for all the sources. Since there is no // reducer, treat it as a plan with null reducer // If it is a map-only job, the task needs to be processed Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/Optimizer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/Optimizer.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/Optimizer.java (working copy) @@ -43,6 +43,7 @@ public void initialize() { transformations = new ArrayList(); transformations.add(new ColumnPruner()); + transformations.add(new MapJoinProcessor()); } /** Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java (working copy) @@ -19,6 +19,7 @@ package org.apache.hadoop.hive.ql.optimizer; import java.util.List; +import java.util.Iterator; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; @@ -32,14 +33,20 @@ import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.ForwardOperator; import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; +import org.apache.hadoop.hive.ql.exec.MapSinkOperator; import org.apache.hadoop.hive.ql.exec.FileSinkOperator; import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.exec.JoinOperator; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.TaskFactory; import org.apache.hadoop.hive.ql.exec.OperatorFactory; +import org.apache.hadoop.hive.ql.exec.RowSchema; +import org.apache.hadoop.hive.ql.plan.fetchWork; import org.apache.hadoop.hive.ql.plan.mapredWork; +import org.apache.hadoop.hive.ql.plan.mapredLocalWork; +import org.apache.hadoop.hive.ql.plan.tableScanDesc; import org.apache.hadoop.hive.ql.plan.reduceSinkDesc; import org.apache.hadoop.hive.ql.plan.tableDesc; import org.apache.hadoop.hive.ql.plan.partitionDesc; @@ -111,7 +118,55 @@ opProcCtx.setCurrAliasId(currAliasId); } + /** + * Initialize the current plan by adding it to root tasks + * @param op the map sink operator encountered + * @param opProcCtx processing context + */ + public static void initPlan(MapSinkOperator op, GenMRProcContext opProcCtx, + boolean local, boolean setTask) + throws SemanticException { + Map, GenMapRedCtx> mapCurrCtx = opProcCtx.getMapCurrCtx(); + GenMapRedCtx mapredCtx = mapCurrCtx.get(op.getParentOperators().get(0)); + Task currTask = mapredCtx.getCurrTask(); + Operator currTopOp = mapredCtx.getCurrTopOp(); + String currAliasId = mapredCtx.getCurrAliasId(); + + mapredWork plan = (mapredWork) currTask.getWork(); + HashMap, Task> opTaskMap = opProcCtx.getOpTaskMap(); + + opTaskMap.put(op.getChildOperators().get(0), currTask); + + if (setTask) { + List> rootTasks = opProcCtx.getRootTasks(); + rootTasks.add(currTask); + + assert currTopOp != null; + List> seenOps = opProcCtx.getSeenOps(); + + seenOps.add(currTopOp); + setTaskPlan(currAliasId, currTopOp, plan, local, opProcCtx); + } + + currTopOp = null; + currAliasId = null; + + opProcCtx.setCurrTask(currTask); + opProcCtx.setCurrTopOp(currTopOp); + opProcCtx.setCurrAliasId(currAliasId); + } + + /** + * Initialize the current plan by adding it to local tasks + * @param op the map sink operator encountered + * @param opProcCtx processing context + */ + public static void initLocalPlan(MapSinkOperator op, GenMRProcContext opProcCtx) throws SemanticException { + initPlan(op, opProcCtx, true, true); + } + + /** * Merge the current task with the task for the current reducer * @param task for the old task for the current reducer * @param opProcCtx processing context @@ -119,7 +174,8 @@ public static void joinPlan(ReduceSinkOperator op, Task oldTask, Task task, - GenMRProcContext opProcCtx) throws SemanticException { + GenMRProcContext opProcCtx, + boolean local) throws SemanticException { Task currTask = task; mapredWork plan = (mapredWork) currTask.getWork(); Operator currTopOp = opProcCtx.getCurrTopOp(); @@ -133,10 +189,25 @@ List> seenOps = opProcCtx.getSeenOps(); String currAliasId = opProcCtx.getCurrAliasId(); - if (!seenOps.contains(currTopOp)) { + // dont need to keep the list of all local tables to be added + if (local) { + setTaskPlan(currAliasId, currTopOp, plan, true, opProcCtx); + } + else if (!seenOps.contains(currTopOp)) { seenOps.add(currTopOp); setTaskPlan(currAliasId, currTopOp, plan, false, opProcCtx); + + /***** + List> rootTasks = opProcCtx.getRootTasks(); + if (rootTasks == null) + rootTasks = new ArrayList>(); + if (!rootTasks.contains(currTask)) + rootTasks.add(currTask); + opProcCtx.setRootTasks(rootTasks); + ******/ + } + currTopOp = null; opProcCtx.setCurrTopOp(currTopOp); } @@ -175,6 +246,26 @@ } /** + * Split the current plan by creating a temporary destination + * @param op the map sink operator encountered + * @param opProcCtx processing context + */ + public static void splitPlan(MapSinkOperator op, GenMRProcContext opProcCtx) throws SemanticException { + // Generate a new task + mapredWork cplan = getMapRedWork(); + ParseContext parseCtx = opProcCtx.getParseCtx(); + Task redTask = TaskFactory.get(cplan, parseCtx.getConf()); + Operator reducer = op.getChildOperators().get(0); + + HashMap, Task> opTaskMap = opProcCtx.getOpTaskMap(); + opTaskMap.put(reducer, redTask); + Task currTask = opProcCtx.getCurrTask(); + + splitTasks(op, currTask, redTask, opProcCtx); + opProcCtx.getRootOps().add(op); + } + + /** * set the current task in the mapredWork * @param alias_id current alias * @param topOp the top operator of the stack @@ -186,53 +277,94 @@ throws SemanticException { ParseContext parseCtx = opProcCtx.getParseCtx(); - if (!local) { - // Generate the map work for this alias_id - PartitionPruner pruner = parseCtx.getAliasToPruner().get(alias_id); - Set parts = null; - try { - // pass both confirmed and unknown partitions through the map-reduce framework - PartitionPruner.PrunedPartitionList partsList = pruner.prune(); - parts = partsList.getConfirmedPartns(); - parts.addAll(partsList.getUnknownPartns()); - } catch (HiveException e) { - // Has to use full name to make sure it does not conflict with org.apache.commons.lang.StringUtils - LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e)); - throw new SemanticException(e.getMessage(), e); + ArrayList partDir = new ArrayList(); + ArrayList partDesc = new ArrayList(); + + Path tblDir = null; + tableDesc tblDesc = null; + + // Generate the map work for this alias_id + PartitionPruner pruner = parseCtx.getAliasToPruner().get(alias_id); + Set parts = null; + try { + // pass both confirmed and unknown partitions through the map-reduce framework + PartitionPruner.PrunedPartitionList partsList = pruner.prune(); + parts = partsList.getConfirmedPartns(); + parts.addAll(partsList.getUnknownPartns()); + } catch (HiveException e) { + // Has to use full name to make sure it does not conflict with org.apache.commons.lang.StringUtils + LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e)); + throw new SemanticException(e.getMessage(), e); + } + SamplePruner samplePruner = parseCtx.getAliasToSamplePruner().get(alias_id); + + for (Partition part : parts) { + // Later the properties have to come from the partition as opposed + // to from the table in order to support versioning. + Path paths[]; + if (samplePruner != null) { + paths = samplePruner.prune(part); } - SamplePruner samplePruner = parseCtx.getAliasToSamplePruner().get(alias_id); - - for (Partition part : parts) { - // Later the properties have to come from the partition as opposed - // to from the table in order to support versioning. - Path paths[]; - if (samplePruner != null) { - paths = samplePruner.prune(part); - } - else { - paths = part.getPath(); - } + else { + paths = part.getPath(); + } + + // is it a partitioned table ? + if (!part.getTable().isPartitioned()) { + assert ((tblDir == null) && (tblDesc == null)); - for (Path p: paths) { - String path = p.toString(); - LOG.debug("Adding " + path + " of table" + alias_id); - // Add the path to alias mapping - if (plan.getPathToAliases().get(path) == null) { - plan.getPathToAliases().put(path, new ArrayList()); - } - plan.getPathToAliases().get(path).add(alias_id); - plan.getPathToPartitionInfo().put(path, Utilities.getPartitionDesc(part)); - LOG.debug("Information added for path " + path); + tblDir = paths[0]; + tblDesc = Utilities.getTableDesc(part.getTable()); + } + + for (Path p: paths) { + String path = p.toString(); + LOG.debug("Adding " + path + " of table" + alias_id); + + partDir.add(p); + partDesc.add(Utilities.getPartitionDesc(part)); + } + } + + Iterator iterPath = partDir.iterator(); + Iterator iterPartnDesc = partDesc.iterator(); + + if (!local) { + while (iterPath.hasNext()) { + assert iterPartnDesc.hasNext(); + String path = iterPath.next().toString(); + + partitionDesc prtDesc = iterPartnDesc.next(); + + // Add the path to alias mapping + if (plan.getPathToAliases().get(path) == null) { + plan.getPathToAliases().put(path, new ArrayList()); } + plan.getPathToAliases().get(path).add(alias_id); + plan.getPathToPartitionInfo().put(path, prtDesc); + LOG.debug("Information added for path " + path); } + plan.getAliasToWork().put(alias_id, topOp); setKeyAndValueDesc(plan, topOp); LOG.debug("Created Map Work for " + alias_id); } else { - FileSinkOperator fOp = (FileSinkOperator) topOp; - fileSinkDesc fConf = (fileSinkDesc)fOp.getConf(); // populate local work if needed + mapredLocalWork localPlan = plan.getMapLocalWork(); + if (localPlan == null) + localPlan = new mapredLocalWork( + new LinkedHashMap>(), + new LinkedHashMap()); + + assert localPlan.getAliasToWork().get(alias_id) == null; + assert localPlan.getAliasToFetchWork().get(alias_id) == null; + localPlan.getAliasToWork().put(alias_id, topOp); + if (tblDir == null) + localPlan.getAliasToFetchWork().put(alias_id, new fetchWork(fetchWork.convertPathToStringArray(partDir), partDesc)); + else + localPlan.getAliasToFetchWork().put(alias_id, new fetchWork(tblDir.toString(), tblDesc)); + plan.setMapLocalWork(localPlan); } } @@ -297,7 +429,7 @@ * @param task the child task * @param opProcCtx context **/ - private static void splitTasks(ReduceSinkOperator op, + private static void splitTasks(Operator op, Task oldTask, Task task, GenMRProcContext opProcCtx) throws SemanticException { @@ -307,7 +439,7 @@ ParseContext parseCtx = opProcCtx.getParseCtx(); oldTask.addDependentTask(currTask); - + // generate the temporary file String scratchDir = opProcCtx.getScratchDir(); int randomid = opProcCtx.getRandomId(); Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPruner.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPruner.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPruner.java (working copy) @@ -134,6 +134,8 @@ pctx.getAliasToSamplePruner().clear(); pctx.getLoadTableWork().clear(); pctx.getLoadFileWork().clear(); + pctx.getJoinContext().clear(); + Iterator> iter = pctx.getOpParseCtx().keySet().iterator(); while (iter.hasNext()) { Operator op = iter.next(); Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java (revision 0) @@ -0,0 +1,331 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.optimizer; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Vector; + +import org.apache.hadoop.hive.ql.exec.ColumnInfo; +import org.apache.hadoop.hive.ql.exec.JoinOperator; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; +import org.apache.hadoop.hive.ql.exec.MapSinkOperator; +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.OperatorFactory; +import org.apache.hadoop.hive.ql.exec.FunctionRegistry; +import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; +import org.apache.hadoop.hive.ql.exec.RowSchema; +import org.apache.hadoop.hive.ql.parse.ASTNode; +import org.apache.hadoop.hive.ql.parse.ErrorMsg; +import org.apache.hadoop.hive.ql.parse.OpParseContext; +import org.apache.hadoop.hive.ql.parse.ParseContext; +import org.apache.hadoop.hive.ql.parse.QBJoinTree; +import org.apache.hadoop.hive.ql.parse.RowResolver; +import org.apache.hadoop.hive.ql.parse.SemanticAnalyzer; +import org.apache.hadoop.hive.ql.parse.SemanticException; +import org.apache.hadoop.hive.ql.parse.joinCond; +import org.apache.hadoop.hive.ql.plan.exprNodeColumnDesc; +import org.apache.hadoop.hive.ql.plan.exprNodeConstantDesc; +import org.apache.hadoop.hive.ql.plan.exprNodeDesc; +import org.apache.hadoop.hive.ql.plan.mapJoinDesc; +import org.apache.hadoop.hive.ql.plan.mapSinkDesc; +import org.apache.hadoop.hive.ql.plan.reduceSinkDesc; +import org.apache.hadoop.hive.ql.typeinfo.TypeInfoFactory; + +/** + * Implementation of one of the rule-based map join optimization. User passes hints to specify map-joins and during this optimization, + * all user specified map joins are converted to MapJoins - the reduce sink operator above the join are converted to map sink operators. + * In future, once statistics are implemented, this transformation can also be done based on costs. + */ +public class MapJoinProcessor implements Transform { + private ParseContext pGraphContext; + + /** + * empty constructor + */ + public MapJoinProcessor() { + pGraphContext = null; + } + + /** + * Is it a map-side join. + * @param op join operator + * @param qbJoin qb join tree + * @return -1 if it cannot be converted to a map-side join, position of the map join node otherwise + */ + private int mapSideJoin(JoinOperator op, QBJoinTree joinTree) throws SemanticException { + int mapJoinPos = -1; + if (joinTree.isMapSideJoin()) { + int pos = 0; + // In a map-side join, exactly one table is not present in memory. + // The client provides the list of tables which can be cached in memory via a hint. + if (joinTree.getJoinSrc() != null) + mapJoinPos = pos; + for (String src : joinTree.getBaseSrc()) { + if (src != null) { + if (!joinTree.getMapAliases().contains(src)) { + if (mapJoinPos >= 0) + return -1; + mapJoinPos = pos; + } + } + pos++; + } + + // All tables are to be cached - this is not possible. In future, we can support this by randomly leaving some table from the list of tables + // to be cached + if (mapJoinPos == -1) + throw new SemanticException(ErrorMsg.INVALID_MAPJOIN_HINT.getMsg(pGraphContext.getQB().getParseInfo().getHints())); + } + + return mapJoinPos; + } + + @SuppressWarnings("nls") + private Operator putOpInsertMap(Operator op, RowResolver rr) { + OpParseContext ctx = new OpParseContext(rr); + pGraphContext.getOpParseCtx().put(op, ctx); + return op; + } + + /** + * convert the reduce sink to an appropriate map-sink operator + * @param rs the input reduce sink operator + * @return the converted map sink operator + */ + private MapSinkOperator convertReduceSinkToMapSink(ReduceSinkOperator rs) throws SemanticException { + Map, OpParseContext> opParseCtx = pGraphContext.getOpParseCtx(); + + RowResolver inputRS = opParseCtx.get(rs.getParentOperators().get(0)).getRR(); + RowResolver outputRS = new RowResolver(); + reduceSinkDesc rsDesc = rs.getConf(); + ArrayList values = new ArrayList(); + + int outputPos = 0; + + // the first position is reserved for the tag. All other columns are copied + outputRS.put("", "MAPJOIN", new ColumnInfo((Integer.valueOf(outputPos++)).toString(), String.class)); + values.add(new exprNodeConstantDesc(TypeInfoFactory.getPrimitiveTypeInfo(Integer.class), new Integer(rsDesc.getTag()))); + + // Walk over the input row resolver and copy in the output + Iterator tblNamesIter = inputRS.getTableNames().iterator(); + while (tblNamesIter.hasNext()) + { + String src = tblNamesIter.next(); + Map fMap = inputRS.getFieldMap(src); + for (Map.Entry entry : fMap.entrySet()) { + String field = entry.getKey(); + ColumnInfo valueInfo = entry.getValue(); + values.add(new exprNodeColumnDesc(valueInfo.getType(), valueInfo.getInternalName())); + assert outputRS.get(src, field) == null; + outputRS.put(src, field, new ColumnInfo((Integer.valueOf(outputPos++)).toString(), valueInfo.getType())); + } + } + + assert rs.getParentOperators().size() == 1; + Operator par = rs.getParentOperators().get(0); + par.setChildOperators(null); + rs.setParentOperators(null); + + MapSinkOperator mapOp = + (MapSinkOperator)putOpInsertMap(OperatorFactory.getAndMakeChild( + new mapSinkDesc(rsDesc.getTag(), values), + new RowSchema(outputRS.getColumnInfos()), par), outputRS); + + return mapOp; + } + + /** + * convert a regular join to a a map-side join. + * @param op join operator + * @param qbJoin qb join tree + * @param mapJoinPos position of the source to be read as part of map-reduce framework. All other sources are cached in memory + */ + private MapJoinOperator convertMapJoin(JoinOperator op, QBJoinTree joinTree, int mapJoinPos) throws SemanticException { + RowResolver outputRS = new RowResolver(); + Map> keyExprMap = new HashMap>(); + Map> valueExprMap = new HashMap>(); + + // Walk over all the sources (which are guaranteed to be reduce sink operators). + // The join outputs a concatenation of all the inputs. + QBJoinTree leftSrc = joinTree.getJoinSrc(); + + List> parentOps = op.getParentOperators(); + MapSinkOperator[] newParentOps = new MapSinkOperator[parentOps.size()]; + + // found a source which is not to be stored in memory + if (leftSrc != null) { + assert mapJoinPos == 0; + MapSinkOperator mJoin = convertReduceSinkToMapSink((ReduceSinkOperator)parentOps.get(0)); + ((mapSinkDesc)mJoin.getConf()).setDummy(true); + newParentOps[mapJoinPos] = mJoin; + } + + int pos = 0; + // Convert parent reduce-sink operators in between to mapSink operators + for (String src : joinTree.getBaseSrc()) { + if (src != null) { + ReduceSinkOperator rs = (ReduceSinkOperator)parentOps.get(pos); + MapSinkOperator mJoin = convertReduceSinkToMapSink(rs); + if (pos == mapJoinPos) + ((mapSinkDesc)mJoin.getConf()).setDummy(true); + newParentOps[pos] = mJoin; + } + pos++; + } + + exprNodeDesc aliasExpr = null; + + int keyLength = 0; + + // create the map-join operator + for (pos = 0; pos < newParentOps.length; pos++) { + RowResolver inputRS = pGraphContext.getOpParseCtx().get(newParentOps[pos]).getRR(); + + List keys = new ArrayList(); + List values = new ArrayList(); + + // Compute join keys and store in reduceKeys + Vector exprs = joinTree.getExpressions().get(pos); + for (int i = 0; i < exprs.size(); i++) { + ASTNode expr = exprs.get(i); + keys.add(SemanticAnalyzer.genExprNodeDesc(pGraphContext.getQB().getMetaData(), expr, inputRS)); + } + + if (pos == 0) + keyLength = keys.size(); + else + assert (keyLength == keys.size()); + + keyExprMap.put(new Byte((byte)pos), keys); + + int outputPos = 0; + Iterator keysIter = inputRS.getTableNames().iterator(); + while (keysIter.hasNext()) + { + String key = keysIter.next(); + HashMap rrMap = inputRS.getFieldMap(key); + Iterator fNamesIter = rrMap.keySet().iterator(); + while (fNamesIter.hasNext()) + { + String field = fNamesIter.next(); + ColumnInfo valueInfo = inputRS.get(key, field); + // ignore the tag - it is not to be propagated + if (!valueInfo.getInternalName().equals(Integer.valueOf(0).toString())) { + values.add(new exprNodeColumnDesc(valueInfo.getType(), valueInfo.getInternalName())); + if (outputRS.get(key, field) == null) + outputRS.put(key, field, new ColumnInfo((Integer.valueOf(outputPos++)).toString(), + valueInfo.getType())); + } + else + aliasExpr = new exprNodeColumnDesc(valueInfo.getType(), valueInfo.getInternalName()); + } + } + + valueExprMap.put(new Byte((byte)pos), values); + } + + // Type conversions may be needed for keys. Do another pass - implicit type conversion hierarchy + for (int k = 0; k < keyLength; k++) { + // Find the common class for type conversion + Class commonClass = keyExprMap.get(new Byte((byte)0)).get(k).getTypeInfo().getPrimitiveClass(); + for(int i = 1; i < newParentOps.length; i++) { + Class a = commonClass; + Class b = keyExprMap.get(new Byte((byte)i)).get(k).getTypeInfo().getPrimitiveClass(); + commonClass = FunctionRegistry.getCommonClass(a, b); + if (commonClass == null) { + throw new SemanticException("Cannot do equality join on different types: " + a.getClass() + " and " + b.getClass()); + } + } + + // Add implicit type conversion if necessary + for(int i = 0; i < newParentOps.length; i++) { + List keys = keyExprMap.get(new Byte((byte)i)); + if (!commonClass.isAssignableFrom(keys.get(k).getTypeInfo().getPrimitiveClass())) { + keys.set(k, SemanticAnalyzer.getFuncExprNodeDesc(commonClass.getName(), keys.get(k))); + } + } + } + + org.apache.hadoop.hive.ql.plan.joinCond[] joinCondns = new org.apache.hadoop.hive.ql.plan.joinCond[joinTree.getJoinCond().length]; + for (int i = 0; i < joinTree.getJoinCond().length; i++) { + joinCond condn = joinTree.getJoinCond()[i]; + joinCondns[i] = new org.apache.hadoop.hive.ql.plan.joinCond(condn); + } + + MapJoinOperator mapJoinOp = (MapJoinOperator)putOpInsertMap(OperatorFactory.getAndMakeChild( + new mapJoinDesc(mapJoinPos, aliasExpr, keyExprMap, valueExprMap, joinCondns), + new RowSchema(outputRS.getColumnInfos()), newParentOps), outputRS); + + // change the children of the original join operator to point to the map join operator + List> childOps = op.getChildOperators(); + for (Operator childOp : childOps) { + List> parList = childOp.getParentOperators(); + for (pos = 0; pos < parList.size(); pos++) { + if (parList.get(pos) == op) { + parList.set(pos, mapJoinOp); + break; + } + } + childOp.setParentOperators(parList); + } + + mapJoinOp.setChildOperators(childOps); + op.setChildOperators(null); + return mapJoinOp; + } + + /** + * Transform the query tree. For each join, check if it is a map-side join (user specified). If yes, convert it to a map-side join + * @param pactx current parse context + */ + public ParseContext transform(ParseContext pactx) throws SemanticException { + this.pGraphContext = pactx; + + // travsere all the joins and convert them if necessary + if (pGraphContext.getJoinContext() != null) { + Map joinMap = new HashMap(); + + Set> joinCtx = pGraphContext.getJoinContext().entrySet(); + Iterator> joinCtxIter = joinCtx.iterator(); + while (joinCtxIter.hasNext()) { + Map.Entry joinEntry = joinCtxIter.next(); + JoinOperator joinOp = joinEntry.getKey(); + QBJoinTree qbJoin = joinEntry.getValue(); + int mapJoinPos = mapSideJoin(joinOp, qbJoin); + if (mapJoinPos >= 0) { + convertMapJoin(joinOp, qbJoin, mapJoinPos); + } + else { + joinMap.put(joinOp, qbJoin); + } + } + + // store the new joinContext + pGraphContext.setJoinContext(joinMap); + } + + return pGraphContext; + } +} Index: ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/FetchOperator.java (revision 0) @@ -0,0 +1,295 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.exec; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.plan.fetchWork; +import org.apache.hadoop.hive.ql.plan.partitionDesc; +import org.apache.hadoop.hive.ql.plan.tableDesc; +import org.apache.hadoop.hive.ql.session.SessionState.LogHelper; +import org.apache.hadoop.hive.serde2.Deserializer; +import org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; +import org.apache.hadoop.io.Writable; +import org.apache.hadoop.io.WritableComparable; +import org.apache.hadoop.mapred.FileInputFormat; +import org.apache.hadoop.mapred.InputFormat; +import org.apache.hadoop.mapred.InputSplit; +import org.apache.hadoop.mapred.JobConf; +import org.apache.hadoop.mapred.RecordReader; +import org.apache.hadoop.mapred.Reporter; +import org.apache.hadoop.util.ReflectionUtils; +import org.apache.hadoop.fs.FileStatus; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hive.serde2.objectinspector.InspectableObject; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory; +import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; + +/** + * FetchTask implementation + **/ +public class FetchOperator { + + transient protected Log LOG; + transient protected LogHelper console; + + public FetchOperator(fetchWork work, JobConf job, FileSystem fs) { + LOG = LogFactory.getLog(this.getClass().getName()); + console = new LogHelper(LOG); + + this.work = work; + this.job = job; + this.fs = fs; + + currRecReader = null; + currPath = null; + currTbl = null; + currPart = null; + iterPath = null; + iterPartDesc = null; + totalRows = 0; + tblDataDone = false; + rowWithPart = new Object[2]; + } + + private fetchWork work; + private int splitNum; + private FileSystem fs; + private RecordReader currRecReader; + private InputSplit[] inputSplits; + private InputFormat inputFormat; + private JobConf job; + private WritableComparable key; + private Writable value; + private Deserializer serde; + private MetadataTypedColumnsetSerDe mSerde; + private int totalRows; + private Iterator iterPath; + private Iterator iterPartDesc; + private Path currPath; + private partitionDesc currPart; + private tableDesc currTbl; + private boolean tblDataDone; + private StructObjectInspector rowObjectInspector; + private Object[] rowWithPart; + + /** + * A cache of InputFormat instances. + */ + private static Map> inputFormats = new HashMap>(); + + static InputFormat getInputFormatFromCache( + Class inputFormatClass, Configuration conf) throws IOException { + if (!inputFormats.containsKey(inputFormatClass)) { + try { + InputFormat newInstance = (InputFormat) ReflectionUtils + .newInstance(inputFormatClass, conf); + inputFormats.put(inputFormatClass, newInstance); + } catch (Exception e) { + throw new IOException("Cannot create an instance of InputFormat class " + + inputFormatClass.getName() + " as specified in mapredWork!"); + } + } + return inputFormats.get(inputFormatClass); + } + + private void setPrtnDesc() throws Exception { + List partNames = new ArrayList(); + List partValues = new ArrayList(); + + String pcols = currPart + .getTableDesc() + .getProperties() + .getProperty( + org.apache.hadoop.hive.metastore.api.Constants.META_TABLE_PARTITION_COLUMNS); + LinkedHashMap partSpec = currPart.getPartSpec(); + + List partObjectInspectors = new ArrayList(); + String[] partKeys = pcols.trim().split("/"); + for (String key : partKeys) { + partNames.add(key); + partValues.add(partSpec.get(key)); + partObjectInspectors.add(ObjectInspectorFactory + .getStandardPrimitiveObjectInspector(String.class)); + } + StructObjectInspector partObjectInspector = ObjectInspectorFactory + .getStandardStructObjectInspector(partNames, partObjectInspectors); + rowObjectInspector = (StructObjectInspector) serde.getObjectInspector(); + + rowWithPart[1] = partValues; + rowObjectInspector = ObjectInspectorFactory + .getUnionStructObjectInspector(Arrays + .asList(new StructObjectInspector[] { rowObjectInspector, + partObjectInspector })); + } + + private void getNextPath() throws Exception { + // first time + if (iterPath == null) { + if (work.getTblDir() != null) { + if (!tblDataDone) { + currPath = work.getTblDirPath(); + currTbl = work.getTblDesc(); + if (fs.exists(currPath)) { + FileStatus[] fStats = fs.listStatus(currPath); + for (FileStatus fStat : fStats) { + if (fStat.getLen() > 0) { + tblDataDone = true; + break; + } + } + } + + if (!tblDataDone) + currPath = null; + return; + } else { + currTbl = null; + currPath = null; + } + return; + } else { + iterPath = fetchWork.convertStringToPathArray(work.getPartDir()).iterator(); + iterPartDesc = work.getPartDesc().iterator(); + } + } + + while (iterPath.hasNext()) { + Path nxt = iterPath.next(); + partitionDesc prt = iterPartDesc.next(); + if (fs.exists(nxt)) { + FileStatus[] fStats = fs.listStatus(nxt); + for (FileStatus fStat : fStats) { + if (fStat.getLen() > 0) { + currPath = nxt; + currPart = prt; + return; + } + } + } + } + } + + private RecordReader getRecordReader() + throws Exception { + if (currPath == null) { + getNextPath(); + if (currPath == null) + return null; + + FileInputFormat.setInputPaths(job, currPath); + tableDesc tmp = currTbl; + if (tmp == null) + tmp = currPart.getTableDesc(); + inputFormat = getInputFormatFromCache(tmp.getInputFileFormatClass(), job); + inputSplits = inputFormat.getSplits(job, 1); + splitNum = 0; + serde = tmp.getDeserializerClass().newInstance(); + serde.initialize(job, tmp.getProperties()); + LOG.debug("Creating fetchTask with deserializer typeinfo: " + + serde.getObjectInspector().getTypeName()); + LOG.debug("deserializer properties: " + tmp.getProperties()); + if (!tblDataDone) + setPrtnDesc(); + } + + if (splitNum >= inputSplits.length) { + if (currRecReader != null) { + currRecReader.close(); + currRecReader = null; + } + currPath = null; + return getRecordReader(); + } + + currRecReader = inputFormat.getRecordReader(inputSplits[splitNum++], job, + Reporter.NULL); + key = currRecReader.createKey(); + value = currRecReader.createValue(); + return currRecReader; + } + + /** + * Get the next row. The fetch context is modified appropriately. + * + * @param ctx + * fetch context + **/ + public InspectableObject getNextRow() { + try { + if (currRecReader == null) { + currRecReader = getRecordReader(); + if (currRecReader == null) + return null; + } + + boolean ret = currRecReader.next(key, value); + if (ret) { + if (tblDataDone) { + Object obj = serde.deserialize(value); + return new InspectableObject(obj, serde.getObjectInspector()); + } else { + rowWithPart[0] = serde.deserialize(value); + return new InspectableObject(rowWithPart, rowObjectInspector); + } + } else { + currRecReader.close(); + currRecReader = null; + currRecReader = getRecordReader(); + if (currRecReader == null) + return null; + else + return getNextRow(); + } + } catch (Exception e) { + return null; + } + } + + /** + * Clear the context, if anything needs to be done. + * + * @param ctx + * fetch context + **/ + public void clearFetchContext() throws HiveException { + try { + if (currRecReader != null) { + currRecReader.close(); + currRecReader = null; + } + } catch (Exception e) { + throw new HiveException("Failed with exception " + e.getMessage() + + org.apache.hadoop.util.StringUtils.stringifyException(e)); + } + } +} Index: ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java (revision 0) @@ -0,0 +1,562 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.exec; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Stack; +import java.util.Vector; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.plan.exprNodeDesc; +import org.apache.hadoop.hive.ql.plan.joinCond; +import org.apache.hadoop.hive.ql.plan.mapJoinDesc; +import org.apache.hadoop.hive.ql.plan.joinDesc; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hive.serde2.objectinspector.InspectableObject; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory; +import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; + +/** + * Join operator implementation. + */ +public class MapJoinOperator extends Operator implements Serializable { + + static final private Log LOG = LogFactory.getLog(MapJoinOperator.class.getName()); + private static final long serialVersionUID = 1L; + private boolean closed = false; + private boolean initialized = false; + + // a list of value expressions for each alias are maintained + // mapping from Byte to both keys are values are stored + public static class JoinExprMap { + ExprNodeEvaluator[] fields; + + public JoinExprMap(ExprNodeEvaluator[] fields) { + this.fields = fields; + } + + public ExprNodeEvaluator[] getFields() { + return fields; + } + } + + + // table stored as a hash map - since both the joinKeys are values are of variable length, both are stored as ArrayLists + public static class JoinHashMap { + Map, Vector>> joinHashMap; + + public JoinHashMap(Map, Vector>> joinHashMap) { + this.joinHashMap = joinHashMap; + } + + public Map, Vector>> getJoinHashMap() { + return joinHashMap; + } + + /** + * @param joinHashMap the joinHashMap to set + */ + public void setJoinHashMap(Map, Vector>> joinHashMap) { + this.joinHashMap = joinHashMap; + } + } + + + public static class IntermediateObject { + List[] objs; + int curSize; + + public IntermediateObject(List[] objs, int curSize) { + this.objs = objs; + this.curSize = curSize; + } + + public List[] getObjs() { + return objs; + } + + public int getCurSize() { + return curSize; + } + + public void pushObj(List obj) { + objs[curSize++] = obj; + } + + public void popObj() { + curSize--; + } + } + + transient protected HashMap joinHashMap; + + transient protected int numValues; // number of aliases + transient private ExprNodeEvaluator aliasField; + transient protected Map joinKeys; + transient protected Map joinValues; + transient static protected Byte[] order; // order in which the results should be output + + transient protected joinCond[] condn; + + transient private int totalSz; // total size of the composite object + transient ObjectInspector joinOutputObjectInspector; + private int posBigTable; // one of the tables that is not in memory + transient private List inputKey; + transient private List inputValue; + transient private Stack>> iterators; + transient private Vector>[] dummyObjVectors; + transient private Object[] dummyObj; // for outer joins, contains the potential nulls + + private void populateJoinKeyValue(Map outMap, Map> inputMap, + boolean computeSize) { + Iterator>> entryIter = inputMap.entrySet().iterator(); + while (entryIter.hasNext()) { + Map.Entry> e = (Map.Entry>) entryIter.next(); + Byte key = (Byte) e.getKey(); + + List expr = (List) e.getValue(); + int sz = expr.size(); + if (computeSize) + totalSz += sz; + + ExprNodeEvaluator[] valueFields = new ExprNodeEvaluator[sz]; + + for (int j = 0; j < sz; j++) + valueFields[j] = ExprNodeEvaluatorFactory.get(expr.get(j)); + + outMap.put(key, new JoinExprMap(valueFields)); + } + } + + private void init() { + joinHashMap = null; + + numValues = 0; // number of aliases + aliasField = null; + joinKeys = null; + joinValues = null; + order = null; // order in which the results should be output + condn = null; + + totalSz = 0; // total size of the composite object + joinOutputObjectInspector = null; + posBigTable = 0; // one of the tables that is not in memory + inputKey = null; + inputValue = null; + iterators = null; + dummyObjVectors = null; + dummyObj = null; // for outer joins, contains the potential nulls + closed = false; + } + + public void initialize(Configuration hconf) throws HiveException { + if (!initialized) { + // For local mode, make sure all data structures are initialized properly + init(); + + super.initialize(hconf); + totalSz = 0; + numValues = conf.getKeys().size(); + + joinKeys = new HashMap(); + joinValues = new HashMap(); + + if (order == null) { + order = new Byte[numValues]; + for (int i = 0; i < numValues; i++) + order[i] = (byte) i; + } + + condn = conf.getConds(); + aliasField = ExprNodeEvaluatorFactory.get(conf.getAliasExpr()); + populateJoinKeyValue(joinKeys, conf.getKeys(), false); + populateJoinKeyValue(joinValues, conf.getValues(), true); + posBigTable = conf.getPosBigTable(); + + ArrayList structFieldObjectInspectors = new ArrayList(totalSz); + for (int i = 0; i < totalSz; i++) { + structFieldObjectInspectors.add(ObjectInspectorFactory + .getStandardPrimitiveObjectInspector(String.class)); + } + joinOutputObjectInspector = ObjectInspectorFactory + .getStandardStructObjectInspector(ObjectInspectorUtils + .getIntegerArray(totalSz), structFieldObjectInspectors); + + dummyObj = new Object[numValues]; + dummyObjVectors = new Vector[numValues]; + + for (Byte alias : order) { + int pos = alias.intValue(); + if (alias.intValue() == posBigTable) + continue; + + int sz = joinKeys.get(alias).getFields().length; + ArrayList nr = new ArrayList(sz); + + for (int j = 0; j < sz; j++) + nr.add(null); + + dummyObj[pos] = nr; + Vector> values = new Vector>(); + values.add((ArrayList) dummyObj[pos]); + dummyObjVectors[pos] = values; + } + + iterators = new Stack>>(); + } + initialized = true; + } + + private Object firstRow; + private ObjectInspector firstRowInspector; + + public void process(Object row, ObjectInspector rowInspector) throws HiveException { + try { + // if it is a map-side join, get all the source table maps + if (joinHashMap == null) { + // initialize the hashmap for each source input + joinHashMap = new HashMap(); + numValues = conf.getKeys().size(); + + for (int pos = 0; pos < numValues; pos++) + if (pos != posBigTable) + joinHashMap.put(new Byte((byte)pos), new JoinHashMap(new HashMap, Vector>>())); + } + + InspectableObject tempAliasInspectableObject = new InspectableObject(); + + // get the expressions for that alias + aliasField.evaluate(row, rowInspector, tempAliasInspectableObject); + assert tempAliasInspectableObject.oi instanceof PrimitiveObjectInspector; + assert ((PrimitiveObjectInspector)tempAliasInspectableObject.oi).getPrimitiveClass() == Integer.class; + + int joinOrder = ((Integer)tempAliasInspectableObject.o).intValue(); + Byte bJoinOrder = new Byte((byte)joinOrder); + + JoinExprMap exmap = joinKeys.get(bJoinOrder); + ExprNodeEvaluator[] fields = exmap.getFields(); + + // Compute key & values + List key = new ArrayList(fields.length); + for (ExprNodeEvaluator field : fields) { + field.evaluate(row, rowInspector, tempAliasInspectableObject); + key.add(tempAliasInspectableObject.o); + } + + // get the expressions for that alias + exmap = joinValues.get(bJoinOrder); + fields = exmap.getFields(); + + // Compute the values + List value = new ArrayList(fields.length); + for (ExprNodeEvaluator field : fields) { + field.evaluate(row, rowInspector, tempAliasInspectableObject); + value.add(tempAliasInspectableObject.o); + } + + // does this source need to be stored in the hash map + if (posBigTable != joinOrder) { + JoinHashMap jMap = joinHashMap.get(bJoinOrder); + Vector> v = jMap.getJoinHashMap().get(key); + if (v == null) + v = new Vector>(); + v.add(value); + jMap.getJoinHashMap().put(key, v); + return; + } + + inputKey = key; + inputValue = value; + + outputJoin(); + } catch (Exception e) { + e.printStackTrace(); + throw new HiveException(e); + } + } + + private void outputJoin() throws HiveException { + genObject(null, 0, new IntermediateObject(new ArrayList[numValues], 0)); + } + + /* + * genObject is a recursive function. For the inputs, a array of bitvectors is + * maintained (inputNulls) where each entry denotes whether the element is to + * be used or not (whether it is null or not). The size of the bitvector is + * same as the number of inputs under consideration currently. When all inputs + * are accounted for, the output is forwared appropriately. + */ + private void genObject(Vector inputNulls, int aliasNum, + IntermediateObject intObj) throws HiveException { + if (aliasNum < numValues) { + Iterator> aliasRes; + + if (aliasNum == posBigTable) { + Vector> v = new Vector>(); + v.add(inputValue); + aliasRes = v.iterator(); + } + // one of the tables in memory + else { + JoinHashMap map = joinHashMap.get(new Byte((byte)aliasNum)); + Vector> values = map.getJoinHashMap().get(inputKey); + aliasRes = (values == null) ? dummyObjVectors[aliasNum].iterator() : values.iterator(); + } + + iterators.push(aliasRes); + while (aliasRes.hasNext()) { + List newObj = aliasRes.next(); + intObj.pushObj(newObj); + Vector newNulls = joinObjects(inputNulls, newObj, intObj, aliasNum); + genObject(newNulls, aliasNum + 1, intObj); + intObj.popObj(); + } + iterators.pop(); + + } else { + if (inputNulls == null) + return; + Iterator nullsIter = inputNulls.iterator(); + while (nullsIter.hasNext()) { + boolean[] nullsVec = nullsIter.next(); + createForwardJoinObject(intObj, nullsVec); + } + } + } + + private void createForwardJoinObject(IntermediateObject intObj, + boolean[] nullsArr) throws HiveException { + ArrayList nr = new ArrayList(totalSz); + for (int i = 0; i < numValues; i++) { + Byte alias = order[i]; + int sz = joinValues.get(alias).getFields().length; + if (nullsArr[i]) { + for (int j = 0; j < sz; j++) { + nr.add(null); + } + } else { + List obj = intObj.getObjs()[i]; + for (int j = 0; j < sz; j++) { + nr.add(obj.get(j)); + } + } + } + + forward(nr, joinOutputObjectInspector); + } + + private Vector joinObjectsInnerJoin(Vector resNulls, + Vector inputNulls, List newObj, + IntermediateObject intObj, int left, boolean newObjNull) { + if (newObjNull) + return resNulls; + Iterator nullsIter = inputNulls.iterator(); + while (nullsIter.hasNext()) { + boolean[] oldNulls = nullsIter.next(); + boolean oldObjNull = oldNulls[left]; + if (!oldObjNull) { + boolean[] newNulls = new boolean[intObj.getCurSize()]; + copyOldArray(oldNulls, newNulls); + newNulls[oldNulls.length] = false; + resNulls.add(newNulls); + } + } + return resNulls; + } + + private Vector joinObjectsLeftOuterJoin( + Vector resNulls, Vector inputNulls, + List newObj, IntermediateObject intObj, int left, + boolean newObjNull) { + Iterator nullsIter = inputNulls.iterator(); + while (nullsIter.hasNext()) { + boolean[] oldNulls = nullsIter.next(); + boolean oldObjNull = oldNulls[left]; + boolean[] newNulls = new boolean[intObj.getCurSize()]; + copyOldArray(oldNulls, newNulls); + if (oldObjNull) + newNulls[oldNulls.length] = true; + else + newNulls[oldNulls.length] = newObjNull; + resNulls.add(newNulls); + } + return resNulls; + } + + private Vector joinObjectsRightOuterJoin( + Vector resNulls, Vector inputNulls, + List newObj, IntermediateObject intObj, int left, + boolean newObjNull) { + if (newObjNull) + return resNulls; + boolean allOldObjsNull = true; + + Iterator nullsIter = inputNulls.iterator(); + while (nullsIter.hasNext()) { + boolean[] oldNulls = nullsIter.next(); + if (!oldNulls[left]) { + allOldObjsNull = false; + break; + } + } + + nullsIter = inputNulls.iterator(); + while (nullsIter.hasNext()) { + boolean[] oldNulls = nullsIter.next(); + boolean oldObjNull = oldNulls[left]; + + if (!oldObjNull) { + boolean[] newNulls = new boolean[intObj.getCurSize()]; + copyOldArray(oldNulls, newNulls); + newNulls[oldNulls.length] = newObjNull; + resNulls.add(newNulls); + } else if (allOldObjsNull) { + boolean[] newNulls = new boolean[intObj.getCurSize()]; + for (int i = 0; i < intObj.getCurSize() - 1; i++) + newNulls[i] = true; + newNulls[oldNulls.length] = newObjNull; + return resNulls; + } + } + return resNulls; + } + + private Vector joinObjectsFullOuterJoin( + Vector resNulls, Vector inputNulls, + List newObj, IntermediateObject intObj, int left, + boolean newObjNull) { + if (newObjNull) { + Iterator nullsIter = inputNulls.iterator(); + while (nullsIter.hasNext()) { + boolean[] oldNulls = nullsIter.next(); + boolean[] newNulls = new boolean[intObj.getCurSize()]; + copyOldArray(oldNulls, newNulls); + newNulls[oldNulls.length] = newObjNull; + resNulls.add(newNulls); + } + return resNulls; + } + + Iterator nullsIter = inputNulls.iterator(); + while (nullsIter.hasNext()) { + boolean[] oldNulls = nullsIter.next(); + boolean oldObjNull = oldNulls[left]; + + if (!oldObjNull) { + boolean[] newNulls = new boolean[intObj.getCurSize()]; + copyOldArray(oldNulls, newNulls); + newNulls[oldNulls.length] = newObjNull; + resNulls.add(newNulls); + } else { + boolean[] newNulls = new boolean[intObj.getCurSize()]; + copyOldArray(oldNulls, newNulls); + newNulls[oldNulls.length] = true; + resNulls.add(newNulls); + } + } + return resNulls; + } + + /* + * The new input is added to the list of existing inputs. Each entry in the + * array of inputNulls denotes the entries in the intermediate object to be + * used. The intermediate object is augmented with the new object, and list of + * nulls is changed appropriately. The list will contain all non-nulls for a + * inner join. The outer joins are processed appropriately. + */ + private Vector joinObjects(Vector inputNulls, + List newObj, IntermediateObject intObj, int joinPos) { + Vector resNulls = new Vector(); + boolean newObjNull = newObj == dummyObj[joinPos] ? true : false; + if (joinPos == 0) { + if (newObjNull) + return null; + boolean[] nulls = new boolean[1]; + nulls[0] = newObjNull; + resNulls.add(nulls); + return resNulls; + } + + int left = condn[joinPos - 1].getLeft(); + int type = condn[joinPos - 1].getType(); + + // process all nulls for RIGHT and FULL OUTER JOINS + if (((type == joinDesc.RIGHT_OUTER_JOIN) || (type == joinDesc.FULL_OUTER_JOIN)) + && !newObjNull && (inputNulls == null)) { + boolean[] newNulls = new boolean[intObj.getCurSize()]; + for (int i = 0; i < newNulls.length - 1; i++) + newNulls[i] = true; + newNulls[newNulls.length - 1] = false; + resNulls.add(newNulls); + return resNulls; + } + + if (inputNulls == null) + return null; + + if (type == joinDesc.INNER_JOIN) + return joinObjectsInnerJoin(resNulls, inputNulls, newObj, intObj, left, + newObjNull); + else if (type == joinDesc.LEFT_OUTER_JOIN) + return joinObjectsLeftOuterJoin(resNulls, inputNulls, newObj, intObj, + left, newObjNull); + else if (type == joinDesc.RIGHT_OUTER_JOIN) + return joinObjectsRightOuterJoin(resNulls, inputNulls, newObj, intObj, + left, newObjNull); + assert (type == joinDesc.FULL_OUTER_JOIN); + return joinObjectsFullOuterJoin(resNulls, inputNulls, newObj, intObj, left, + newObjNull); + } + + /** + * All done + * + */ + public void close(boolean abort) throws HiveException { + if (!closed) { + closed = true; + LOG.trace("Join Op close"); + super.close(abort); + } + initialized = false; + } + + private void copyOldArray(boolean[] src, boolean[] dest) { + for (int i = 0; i < src.length; i++) + dest[i] = src[i]; + } + + /** + * returns the name of the operator - specific subclasses can override the name as and when needed + * @return the name of the operator + */ + public String getName() { + return new String("MAPJOIN"); + } + +} Index: ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java (working copy) @@ -517,4 +517,12 @@ super.close(abort); } + /** + * returns the name of the operator - specific subclasses can override the name as and when needed + * @return the name of the operator + */ + public String getName() { + return new String("JOIN"); + } + } Index: ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java (working copy) @@ -34,27 +34,14 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.plan.fetchWork; -import org.apache.hadoop.hive.ql.plan.partitionDesc; import org.apache.hadoop.hive.ql.plan.tableDesc; -import org.apache.hadoop.hive.serde2.Deserializer; import org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; -import org.apache.hadoop.io.Writable; -import org.apache.hadoop.io.WritableComparable; -import org.apache.hadoop.mapred.FileInputFormat; -import org.apache.hadoop.mapred.InputFormat; -import org.apache.hadoop.mapred.InputSplit; import org.apache.hadoop.mapred.JobConf; -import org.apache.hadoop.mapred.RecordReader; -import org.apache.hadoop.mapred.Reporter; -import org.apache.hadoop.util.ReflectionUtils; import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.hive.serde.Constants; -import org.apache.hadoop.fs.FileStatus; -import org.apache.hadoop.fs.Path; -import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory; -import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.InspectableObject; /** * FetchTask implementation @@ -63,30 +50,23 @@ private static final long serialVersionUID = 1L; private int maxRows = 100; - + FetchOperator ftOp; + public void initialize (HiveConf conf) { super.initialize(conf); - currRecReader = null; try { // Create a file system handle - fs = FileSystem.get(conf); - job = new JobConf(conf, ExecDriver.class); + FileSystem fs = FileSystem.get(conf); + JobConf job = new JobConf(conf, ExecDriver.class); mSerde = new MetadataTypedColumnsetSerDe(); Properties mSerdeProp = new Properties(); mSerdeProp.put(Constants.SERIALIZATION_FORMAT, "" + Utilities.tabCode); mSerdeProp.put(Constants.SERIALIZATION_NULL_FORMAT, "NULL"); mSerde.initialize(job, mSerdeProp); - - currPath = null; - currTbl = null; - currPart = null; - iterPath = null; - iterPartDesc = null; - totalRows = 0; - tblDataDone = false; - rowWithPart = new Object[2]; + + ftOp = new FetchOperator(work, job, fs); } catch (Exception e) { // Bail out ungracefully - we should never hit // this here - but would have hit it in SemanticAnalyzer @@ -106,153 +86,9 @@ return work.getTblDesc(); } - /** - * A cache of InputFormat instances. - */ - private static Map> inputFormats = - new HashMap>(); - - static InputFormat getInputFormatFromCache(Class inputFormatClass, Configuration conf) throws IOException { - if (!inputFormats.containsKey(inputFormatClass)) { - try { - InputFormat newInstance = - (InputFormat)ReflectionUtils.newInstance(inputFormatClass, conf); - inputFormats.put(inputFormatClass, newInstance); - } catch (Exception e) { - throw new IOException("Cannot create an instance of InputFormat class " + inputFormatClass.getName() - + " as specified in mapredWork!"); - } - } - return inputFormats.get(inputFormatClass); - } - - private int splitNum; - private FileSystem fs; - private RecordReader currRecReader; - private InputSplit[] inputSplits; - private InputFormat inputFormat; - private JobConf job; - private WritableComparable key; - private Writable value; - private Deserializer serde; private MetadataTypedColumnsetSerDe mSerde; private int totalRows; - private Iterator iterPath; - private Iterator iterPartDesc; - private Path currPath; - private partitionDesc currPart; - private tableDesc currTbl; - private boolean tblDataDone; - private StructObjectInspector rowObjectInspector; - private Object[] rowWithPart; - private void setPrtnDesc() throws Exception { - List partNames = new ArrayList(); - List partValues = new ArrayList(); - - String pcols = currPart.getTableDesc().getProperties().getProperty(org.apache.hadoop.hive.metastore.api.Constants.META_TABLE_PARTITION_COLUMNS); - LinkedHashMap partSpec = currPart.getPartSpec(); - - List partObjectInspectors = new ArrayList(); - String[] partKeys = pcols.trim().split("/"); - for(String key: partKeys) { - partNames.add(key); - partValues.add(partSpec.get(key)); - partObjectInspectors.add(ObjectInspectorFactory.getStandardPrimitiveObjectInspector(String.class)); - } - StructObjectInspector partObjectInspector = ObjectInspectorFactory.getStandardStructObjectInspector(partNames, partObjectInspectors); - rowObjectInspector = (StructObjectInspector)serde.getObjectInspector(); - - rowWithPart[1] = partValues; - rowObjectInspector = ObjectInspectorFactory.getUnionStructObjectInspector(Arrays.asList(new StructObjectInspector[]{ - rowObjectInspector, partObjectInspector})); - } - - private void getNextPath() throws Exception { - // first time - if (iterPath == null) { - if (work.getTblDir() != null) { - if (!tblDataDone) { - currPath = work.getTblDir(); - currTbl = work.getTblDesc(); - if (fs.exists(currPath)) - { - FileStatus[] fStats = fs.listStatus(currPath); - for (FileStatus fStat:fStats) { - if (fStat.getLen() > 0) { - tblDataDone = true; - break; - } - } - } - - if (!tblDataDone) currPath = null; - return; - } else { - currTbl = null; - currPath = null; - } - return; - } - else { - iterPath = work.getPartDir().iterator(); - iterPartDesc = work.getPartDesc().iterator(); - } - } - - while (iterPath.hasNext()) { - Path nxt = iterPath.next(); - partitionDesc prt = iterPartDesc.next(); - if (fs.exists(nxt)) - { - FileStatus[] fStats = fs.listStatus(nxt); - for (FileStatus fStat:fStats) { - if (fStat.getLen() > 0) { - currPath = nxt; - currPart = prt; - return; - } - } - } - } - } - - private RecordReader getRecordReader() throws Exception { - if (currPath == null) { - getNextPath(); - if (currPath == null) - return null; - - FileInputFormat.setInputPaths(job, currPath); - tableDesc tmp = currTbl; - if (tmp == null) - tmp = currPart.getTableDesc(); - inputFormat = getInputFormatFromCache(tmp.getInputFileFormatClass(), job); - inputSplits = inputFormat.getSplits(job, 1); - splitNum = 0; - serde = tmp.getDeserializerClass().newInstance(); - serde.initialize(job, tmp.getProperties()); - LOG.debug("Creating fetchTask with deserializer typeinfo: " + serde.getObjectInspector().getTypeName()); - LOG.debug("deserializer properties: " + tmp.getProperties()); - if (!tblDataDone) - setPrtnDesc(); - } - - if (splitNum >= inputSplits.length) { - if (currRecReader != null) { - currRecReader.close(); - currRecReader = null; - } - currPath = null; - return getRecordReader(); - } - - currRecReader = inputFormat.getRecordReader(inputSplits[splitNum++], job, Reporter.NULL); - key = currRecReader.createKey(); - value = currRecReader.createValue(); - return currRecReader; - } - /** * Return the maximum number of rows returned by fetch */ @@ -274,50 +110,23 @@ if ((work.getLimit() >= 0) && ((work.getLimit() - totalRows) < rowsRet)) rowsRet = work.getLimit() - totalRows; if (rowsRet <= 0) { - if (currRecReader != null) { - currRecReader.close(); - currRecReader = null; - } + ftOp.clearFetchContext(); return false; } while (numRows < rowsRet) { - if (currRecReader == null) { - currRecReader = getRecordReader(); - if (currRecReader == null) { - if (numRows == 0) - return false; - totalRows += numRows; - return true; - } - } - boolean ret = currRecReader.next(key, value); - if (ret) { - if (tblDataDone) { - Object obj = serde.deserialize(value); - res.add(((Text)mSerde.serialize(obj, serde.getObjectInspector())).toString()); - } else { - rowWithPart[0] = serde.deserialize(value); - res.add(((Text)mSerde.serialize(rowWithPart, rowObjectInspector)).toString()); - } - numRows++; - } - else { - currRecReader.close(); - currRecReader = null; - currRecReader = getRecordReader(); - if (currRecReader == null) { - if (numRows == 0) - return false; - totalRows += numRows; - return true; - } - else { - key = currRecReader.createKey(); - value = currRecReader.createValue(); - } - } - } + InspectableObject io = ftOp.getNextRow(); + if (io == null) { + if (numRows == 0) + return false; + totalRows += numRows; + return true; + } + + res.add(((Text)mSerde.serialize(io.o, io.oi)).toString()); + numRows++; + } + totalRows += numRows; return true; } Index: ql/src/java/org/apache/hadoop/hive/ql/exec/OperatorFactory.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/OperatorFactory.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/OperatorFactory.java (working copy) @@ -49,6 +49,8 @@ opvec.add(new opTuple (groupByDesc.class, GroupByOperator.class)); opvec.add(new opTuple (joinDesc.class, JoinOperator.class)); opvec.add(new opTuple (limitDesc.class, LimitOperator.class)); + opvec.add(new opTuple (mapSinkDesc.class, MapSinkOperator.class)); + opvec.add(new opTuple (mapJoinDesc.class, MapJoinOperator.class)); opvec.add(new opTuple (tableScanDesc.class, TableScanOperator.class)); } Index: ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeColumnEvaluator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeColumnEvaluator.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeColumnEvaluator.java (working copy) @@ -21,7 +21,6 @@ import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.plan.exprNodeColumnDesc; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; -import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.StructField; import org.apache.hadoop.hive.serde2.objectinspector.InspectableObject; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; Index: ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java (working copy) @@ -43,11 +43,18 @@ // Bean methods private static final long serialVersionUID = 1L; + private static int nxtId; + static { + nxtId = 0; + } + protected List> childOperators; protected List> parentOperators; - public Operator() {} + public Operator() { + id = String.valueOf(nxtId++); + } public void setChildOperators(List> childOperators) { this.childOperators = childOperators; @@ -314,4 +321,17 @@ return new String("OP"); } + public String dumpOperatorTree() { + StringBuilder ops = new StringBuilder(); + ops.append(" "); + ops.append(""); + ops.append(""); + + if (childOperators != null) + for (Operator child : childOperators) + ops.append(child.dumpOperatorTree()); + + ops.append(""); + return ops.toString(); + } } Index: ql/src/java/org/apache/hadoop/hive/ql/exec/FilterOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/FilterOperator.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/FilterOperator.java (working copy) @@ -81,5 +81,4 @@ public String getName() { return new String("FIL"); } - } Index: ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java (working copy) @@ -128,6 +128,22 @@ } } + public static Path getPathFromString(String name) { + return new Path(name); + } + + public static class PathDelegate extends DefaultPersistenceDelegate { + @Override + protected Expression instantiate(Object oldInstance, Encoder out) { + return new Expression(Utilities.class, + "getPathFromString", + new Object[] {((Path) oldInstance).toString() }); + } + protected boolean mutatesTo(Object oldInstance, Object newInstance) { + return oldInstance == newInstance; + } + } + public static void setMapRedWork (Configuration job, mapredWork w) { try { // use the default file system of the job Index: ql/src/java/org/apache/hadoop/hive/ql/exec/MapSinkOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/MapSinkOperator.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MapSinkOperator.java (revision 0) @@ -0,0 +1,100 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.exec; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.plan.exprNodeDesc; +import org.apache.hadoop.hive.ql.plan.mapSinkDesc; +import org.apache.hadoop.hive.serde2.objectinspector.InspectableObject; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory; + +/** + * Map Sink Operator: the output is buffered with the map - it is not send anywhere + * Map Sink is a terminal operator + **/ +public class MapSinkOperator extends TerminalOperator implements Serializable { + + private static final long serialVersionUID = 1L; + + transient protected ExprNodeEvaluator[] eval; + transient ArrayList output; + transient ArrayList outputFieldObjectInspectors; + transient ObjectInspector outputObjectInspector; + transient InspectableObject tempInspectableObject; + + boolean firstRow; + + public void initialize(Configuration hconf) throws HiveException { + super.initialize(hconf); + try { + List colList = conf.getColList(); + eval = new ExprNodeEvaluator[colList.size()]; + for(int i=0; i(eval.length); + outputFieldObjectInspectors = new ArrayList(eval.length); + for(int j=0; j fieldNames = new ArrayList(eval.length); + for(int i=0; i fetchOperators; private OutputCollector oc; private JobConf jc; private boolean abort = false; @@ -39,12 +46,43 @@ public static final Log l4j = LogFactory.getLog("ExecMapper"); private static boolean done; + private void init() { + mo = null; + fetchOperators = null; + oc = null; + jc = null; + abort = false; + rp = null; + } + public void configure(JobConf job) { - jc = job; - mapredWork mrwork = Utilities.getMapRedWork(job); - mo = new MapOperator (); - mo.setConf(mrwork); - // we don't initialize the operator until we have set the output collector + try { + init(); + jc = job; + mapredWork mrwork = Utilities.getMapRedWork(job); + mo = new MapOperator(); + mo.setConf(mrwork); + mapredLocalWork mlo = mrwork.getMapLocalWork(); + if (mlo != null) { + fetchOperators = new HashMap(); + Map aliasToFetchWork = mlo.getAliasToFetchWork(); + FileSystem fs = FileSystem.get(job); + Iterator> fetchWorkSet = aliasToFetchWork + .entrySet().iterator(); + while (fetchWorkSet.hasNext()) { + Map.Entry entry = fetchWorkSet.next(); + String alias = entry.getKey(); + fetchWork fWork = entry.getValue(); + fetchOperators.put(alias, new FetchOperator(fWork, job, fs)); + } + } + + // we don't initialize the operator until we have set the output collector + } catch (Exception e) { + // Bail out ungracefully - we should never hit + // this here - but would have hit it in SemanticAnalyzer + throw new RuntimeException(e); + } } public void map(Object key, Object value, @@ -55,6 +93,28 @@ oc = output; mo.setOutputCollector(oc); mo.initialize(jc); + if (fetchOperators != null) { + mapredWork mrwork = Utilities.getMapRedWork(jc); + mapredLocalWork localWork = mrwork.getMapLocalWork(); + Iterator> fetchOps = fetchOperators.entrySet().iterator(); + while (fetchOps.hasNext()) { + Map.Entry entry = fetchOps.next(); + String alias = entry.getKey(); + FetchOperator fetchOp = entry.getValue(); + Operator forwardOp = localWork.getAliasToWork().get(alias); + forwardOp.initialize(jc); + + while (true) { + InspectableObject row = fetchOp.getNextRow(); + if (row == null) { + break; + } + + forwardOp.process(row.o, row.oi); + } + } + } + rp = reporter; } catch (HiveException e) { abort = true; @@ -94,6 +154,19 @@ // ideally hadoop should let us know whether map execution failed or not try { mo.close(abort); + + if (fetchOperators != null) { + mapredWork mrwork = Utilities.getMapRedWork(jc); + mapredLocalWork localWork = mrwork.getMapLocalWork(); + Iterator> fetchOps = fetchOperators.entrySet().iterator(); + while (fetchOps.hasNext()) { + Map.Entry entry = fetchOps.next(); + String alias = entry.getKey(); + Operator forwardOp = localWork.getAliasToWork().get(alias); + forwardOp.close(abort); + } + } + reportStats rps = new reportStats (rp); mo.preorderMap(rps); return; Index: ql/src/java/org/apache/hadoop/hive/ql/exec/MapRedTask.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/MapRedTask.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MapRedTask.java (working copy) @@ -59,7 +59,6 @@ LOG.info("Generating plan file " + planFile.toString()); FileOutputStream out = new FileOutputStream(planFile); Utilities.serializeMapRedWork(plan, out); - String cmdLine = hadoopExec + " jar " + auxJars + " " + hiveJar + " org.apache.hadoop.hive.ql.exec.ExecDriver -plan " + planFile.toString() + " " + hiveConfArgs; String files = ExecDriver.getRealFiles(conf); Index: ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java (working copy) @@ -85,6 +85,7 @@ outputObjectInspector = ObjectInspectorFactory.getStandardStructObjectInspector( fieldNames, outputFieldObjectInspectors); } + forward(output, outputObjectInspector); } Index: ql/src/java/org/apache/hadoop/hive/ql/plan/mapSinkDesc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/mapSinkDesc.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/mapSinkDesc.java (revision 0) @@ -0,0 +1,69 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.plan; + +import java.io.Serializable; +import java.util.ArrayList; + +@explain(displayName="Map Sink Operator") +public class mapSinkDesc implements Serializable { + private static final long serialVersionUID = 1L; + private ArrayList colList; + + /** + * The tag for this mapsink descriptor. + */ + private int tag; + + // is it a dummy map-side operator + private boolean dummy; + + public mapSinkDesc() { } + public mapSinkDesc(final int tag, final ArrayList colList) { + this.tag = tag; + this.colList = colList; + } + + @explain(displayName="expressions") + public ArrayList getColList() { + return this.colList; + } + + public void setColList(final ArrayList colList) { + this.colList=colList; + } + + @explain(displayName="tag") + public int getTag() { + return this.tag; + } + + public void setTag(int tag) { + this.tag = tag; + } + + @explain(displayName="dummy") + public boolean isDummy() { + return this.dummy; + } + + public void setDummy(boolean dummy) { + this.dummy = dummy; + } +} Index: ql/src/java/org/apache/hadoop/hive/ql/plan/mapredWork.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/mapredWork.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/mapredWork.java (working copy) @@ -50,6 +50,7 @@ private boolean needsTagging; private boolean inferNumReducers; + private mapredLocalWork mapLocalWork; public mapredWork() { } public mapredWork( @@ -60,7 +61,8 @@ final tableDesc keyDesc, List tagToValueDesc, final Operator reducer, - final Integer numReduceTasks) { + final Integer numReduceTasks, + final mapredLocalWork mapLocalWork) { this.command = command; this.pathToAliases = pathToAliases; this.pathToPartitionInfo = pathToPartitionInfo; @@ -69,7 +71,9 @@ this.tagToValueDesc = tagToValueDesc; this.reducer = reducer; this.numReduceTasks = numReduceTasks; + this.mapLocalWork = mapLocalWork; } + public String getCommand() { return this.command; } @@ -100,6 +104,21 @@ public void setAliasToWork(final HashMap> aliasToWork) { this.aliasToWork=aliasToWork; } + + /** + * @return the mapredLocalWork + */ + @explain(displayName="Local Work") + public mapredLocalWork getMapLocalWork() { + return mapLocalWork; + } + /** + * @param mapredLocalWork the mapredLocalWork to set + */ + public void setMapLocalWork(final mapredLocalWork mapLocalWork) { + this.mapLocalWork = mapLocalWork; + } + public tableDesc getKeyDesc() { return this.keyDesc; } @@ -129,6 +148,8 @@ public void setNumReduceTasks(final Integer numReduceTasks) { this.numReduceTasks = numReduceTasks; } + + @SuppressWarnings("nls") public void addMapWork(String path, String alias, Operator work, partitionDesc pd) { ArrayList curAliases = this.pathToAliases.get(path); @@ -174,7 +195,6 @@ } // non bean - /** * For each map side operator - stores the alias the operator is working on behalf * of in the operator runtime state. This is used by reducesink operator - but could Index: ql/src/java/org/apache/hadoop/hive/ql/plan/mapJoinDesc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/mapJoinDesc.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/mapJoinDesc.java (revision 0) @@ -0,0 +1,142 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.plan; + +import java.io.Serializable; + +import org.apache.hadoop.hive.ql.plan.exprNodeDesc; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Map Join operator Descriptor implementation. + * + */ +@explain(displayName="MapSide Join Operator") +public class mapJoinDesc implements Serializable { + private static final long serialVersionUID = 1L; + public static final int INNER_JOIN = 0; + public static final int LEFT_OUTER_JOIN = 1; + public static final int RIGHT_OUTER_JOIN = 2; + public static final int FULL_OUTER_JOIN = 3; + + // list of tables that are to be collected in memory + private exprNodeDesc aliasExpr; + private Map> keys; + private Map> values; + private int posBigTable; + + private joinCond[] conds; + + public mapJoinDesc() { } + + /** + * @param conds + * @param keys + * @param values + */ + public mapJoinDesc(final int posBigTable, final exprNodeDesc aliasExpr, + final Map> keys, + final Map> values, final joinCond[] conds) { + this.conds = conds; + this.keys = keys; + this.posBigTable = posBigTable; + this.values = values; + this.aliasExpr = aliasExpr; + } + + /** + * @return the keys + */ + public Map> getKeys() { + return keys; + } + + /** + * @param keys the keys to set + */ + public void setKeys(Map> keys) { + this.keys = keys; + } + + /** + * @return the values + */ + public Map> getValues() { + return values; + } + + /** + * @param values the values to set + */ + public void setValues(Map> values) { + this.values = values; + } + + /** + * @return the position of the big table not in memory + */ + public int getPosBigTable() { + return posBigTable; + } + + /** + * @param posBigTable the position of the big table not in memory + */ + public void setPosBigTable(int posBigTable) { + this.posBigTable = posBigTable; + } + + @explain(displayName="condition map") + public List getCondsList() { + if (conds == null) { + return null; + } + + List l = new ArrayList(); + for(joinCond cond: conds) { + l.add(cond); + } + + return l; + } + + public joinCond[] getConds() { + return this.conds; + } + + public void setConds(final joinCond[] conds) { + this.conds = conds; + } + + /** + * @return the aliasExpr + */ + public exprNodeDesc getAliasExpr() { + return aliasExpr; + } + + /** + * @param aliasExpr the aliasExpr to set + */ + public void setAliasExpr(exprNodeDesc aliasExpr) { + this.aliasExpr = aliasExpr; + } +} Index: ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java (working copy) @@ -54,7 +54,8 @@ new tableDesc(), new ArrayList (), null, - Integer.valueOf (1)); + Integer.valueOf (1), + null); } /** @@ -235,4 +236,4 @@ } - \ No newline at end of file + Index: ql/src/java/org/apache/hadoop/hive/ql/plan/mapredLocalWork.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/mapredLocalWork.java (revision 0) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/mapredLocalWork.java (revision 0) @@ -0,0 +1,66 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hive.ql.plan; + +import java.util.*; +import java.io.*; + +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.Utilities; + +@explain(displayName="Map Reduce Local Work") +public class mapredLocalWork implements Serializable { + private static final long serialVersionUID = 1L; + + private LinkedHashMap> aliasToWork; + private LinkedHashMap aliasToFetchWork; + + public mapredLocalWork() { } + + public mapredLocalWork(final LinkedHashMap> aliasToWork, + final LinkedHashMap aliasToFetchWork) { + this.aliasToWork = aliasToWork; + this.aliasToFetchWork = aliasToFetchWork; + } + + @explain(displayName="Alias -> Map Local Operator Tree") + public LinkedHashMap> getAliasToWork() { + return aliasToWork; + } + + public void setAliasToWork(final LinkedHashMap> aliasToWork) { + this.aliasToWork = aliasToWork; + } + + /** + * @return the aliasToFetchWork + */ + @explain(displayName="Alias -> Map Local Tables") + public LinkedHashMap getAliasToFetchWork() { + return aliasToFetchWork; + } + + /** + * @param aliasToFetchWork the aliasToFetchWork to set + */ + public void setAliasToFetchWork(final LinkedHashMap aliasToFetchWork) { + this.aliasToFetchWork = aliasToFetchWork; + } +} Index: ql/src/java/org/apache/hadoop/hive/ql/plan/fetchWork.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/fetchWork.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/fetchWork.java (working copy) @@ -19,7 +19,7 @@ package org.apache.hadoop.hive.ql.plan; import java.io.Serializable; -import java.util.List; +import java.util.ArrayList; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.ql.plan.tableDesc; @@ -28,23 +28,41 @@ public class fetchWork implements Serializable { private static final long serialVersionUID = 1L; - private Path tblDir; + private String tblDir; private tableDesc tblDesc; - private List partDir; - private List partDesc; + private ArrayList partDir; + private ArrayList partDesc; private int limit; public fetchWork() { } - public fetchWork(Path tblDir, tableDesc tblDesc, int limit) { + public fetchWork(final String tblDir, final tableDesc tblDesc, + final ArrayList partDir, final ArrayList partDesc, + final int limit) { + this.tblDir = tblDir; + this.tblDesc = tblDesc; + this.partDir = partDir; + this.partDesc = partDesc; + this.limit = limit; + } + + public fetchWork(final String tblDir, final tableDesc tblDesc) { + this(tblDir, tblDesc, -1); + } + + public fetchWork(final String tblDir, final tableDesc tblDesc, final int limit) { this.tblDir = tblDir; this.tblDesc = tblDesc; this.limit = limit; } - public fetchWork(List partDir, List partDesc, int limit) { + public fetchWork(final ArrayList partDir, final ArrayList partDesc) { + this(partDir, partDesc, -1); + } + + public fetchWork(final ArrayList partDir, final ArrayList partDesc, final int limit) { this.partDir = partDir; this.partDesc = partDesc; this.limit = limit; @@ -53,14 +71,18 @@ /** * @return the tblDir */ - public Path getTblDir() { + public String getTblDir() { return tblDir; } + + public Path getTblDirPath() { + return new Path(tblDir); + } /** * @param tblDir the tblDir to set */ - public void setTblDir(Path tblDir) { + public void setTblDir(final String tblDir) { this.tblDir = tblDir; } @@ -74,35 +96,61 @@ /** * @param tblDesc the tblDesc to set */ - public void setTblDesc(tableDesc tblDesc) { + public void setTblDesc(final tableDesc tblDesc) { this.tblDesc = tblDesc; } /** * @return the partDir */ - public List getPartDir() { + public ArrayList getPartDir() { return partDir; } + public ArrayList getPartDirPath() { + return fetchWork.convertStringToPathArray(partDir); + } + + public static ArrayList convertPathToStringArray(ArrayList paths) { + if (paths == null) + return null; + + ArrayList pathsStr = new ArrayList(); + for (Path path : paths) + pathsStr.add(path.toString()); + + return pathsStr; + } + + public static ArrayList convertStringToPathArray(ArrayList paths) { + if (paths == null) + return null; + + ArrayList pathsStr = new ArrayList(); + for (String path : paths) + pathsStr.add(new Path(path)); + + return pathsStr; + } + /** * @param partDir the partDir to set */ - public void setPartDir(List partDir) { + public void setPartDir(final ArrayList partDir) { this.partDir = partDir; } /** * @return the partDesc */ - public List getPartDesc() { + public ArrayList getPartDesc() { return partDesc; } /** * @param partDesc the partDesc to set */ - public void setPartDesc(List partDesc) { + public void setPartDesc(final ArrayList partDesc) { this.partDesc = partDesc; } @@ -117,7 +165,21 @@ /** * @param limit the limit to set */ - public void setLimit(int limit) { + public void setLimit(final int limit) { this.limit = limit; } + + public String toString() { + if (tblDir != null) + return new String ("table = " + tblDir); + + if (partDir == null) + return "null fetchwork"; + + String ret = new String("partition = "); + for (String part : partDir) + ret = ret.concat(part); + + return ret; + } } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/QBJoinTree.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/QBJoinTree.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/QBJoinTree.java (working copy) @@ -18,6 +18,7 @@ package org.apache.hadoop.hive.ql.parse; +import java.util.List; import java.util.Vector; /** @@ -40,7 +41,11 @@ // filters private Vector> filters; - + + // user asked for map-side join + private boolean mapSideJoin; + private List mapAliases; + /** * constructor */ @@ -140,6 +145,33 @@ this.filters = filters; } + /** + * @return the mapSidejoin + */ + public boolean isMapSideJoin() { + return mapSideJoin; + } + + /** + * @param mapSidejoin the mapSidejoin to set + */ + public void setMapSideJoin(boolean mapSideJoin) { + this.mapSideJoin = mapSideJoin; + } + + /** + * @return the mapAliases + */ + public List getMapAliases() { + return mapAliases; + } + + /** + * @param mapAliases the mapAliases to set + */ + public void setMapAliases(List mapAliases) { + this.mapAliases = mapAliases; + } } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/GenMapRedWalker.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/GenMapRedWalker.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/GenMapRedWalker.java (working copy) @@ -49,18 +49,24 @@ // maintain the stack of operators encountered opStack.push(nd); dispatch(nd, opStack); + boolean done = children == null ? true : false; // kids of reduce sink operator need not be traversed again - if ((children == null) || - ((nd instanceof ReduceSinkOperator) && (getDispatchedList().containsAll(children)))) { + if ((nd instanceof ReduceSinkOperator) && (getDispatchedList().containsAll(children))) + done = true; + + if ((nd instanceof MapSinkOperator) && (!((MapSinkOperator)nd).getConf().isDummy())) + done = true; + + if (done) { opStack.pop(); return; } - + // move all the children to the front of queue for (Node ch : children) walk(ch); - + // done with this operator opStack.pop(); } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java (working copy) @@ -34,6 +34,7 @@ private boolean isSubQ; private String alias; private ASTNode joinExpr; + private ASTNode hints; private HashMap aliasToSrc; private HashMap nameToDest; private HashMap nameToSample; @@ -316,4 +317,12 @@ return true; } + public void setHints(ASTNode hint) { + this.hints = hint; + } + + public ASTNode getHints() { + return hints; + } + } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java (working copy) @@ -39,6 +39,7 @@ INVALID_JOIN_CONDITION_1("Both Left and Right Aliases Encountered in Join"), INVALID_JOIN_CONDITION_2("Neither Left nor Right Aliases Encountered in Join"), INVALID_JOIN_CONDITION_3("OR not supported in Join currently"), + INVALID_MAPJOIN_HINT("neither table specified as map-table"), INVALID_TRANSFORM("TRANSFORM with Other Select Columns not Supported"), DUPLICATE_GROUPBY_KEY("Repeated Key in Group By"), UNSUPPORTED_MULTIPLE_DISTINCTS("DISTINCT on Different Columns not Supported"), @@ -101,7 +102,7 @@ return getText((ASTNode)tree.getChild(tree.getChildCount() - 1)); } - String getMsg(ASTNode tree) { + public String getMsg(ASTNode tree) { return "line " + getLine(tree) + ":" + getCharPositionInLine(tree) + " " + mesg + " " + getText(tree); } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (working copy) @@ -120,6 +120,10 @@ TOK_TABTYPE; TOK_LIMIT; TOK_TABLEPROPERTY; +TOK_HINTLIST; +TOK_HINT; +TOK_MAPJOIN; +TOK_HINTARGLIST; } @@ -478,9 +482,39 @@ selectList : - selectItem ( COMMA selectItem )* -> selectItem+ + hintClause? selectItem ( COMMA selectItem )* -> hintClause? selectItem+ ; +hintClause + : + DIVIDE STAR PLUS hintList STAR DIVIDE -> ^(TOK_HINTLIST hintList) + ; + +hintList + : + hintItem (COMMA hintItem)* -> hintItem+ + ; + +hintItem + : + hintName (LPAREN hintArgs RPAREN)? -> ^(TOK_HINT hintName hintArgs) + ; + +hintName + : + KW_MAPJOIN -> TOK_MAPJOIN + ; + +hintArgs + : + hintArgName (COMMA hintArgName)* -> ^(TOK_HINTARGLIST hintArgName+) + ; + +hintArgName + : + Identifier + ; + selectItem : ( selectExpression (KW_AS Identifier)?) -> ^(TOK_SELEXPR selectExpression Identifier?) @@ -926,6 +960,7 @@ KW_LIMIT: 'LIMIT'; KW_SET: 'SET'; KW_PROPERTIES: 'TBLPROPERTIES'; +KW_MAPJOIN : 'MAPJOIN'; KW_VALUE_TYPE: '$VALUE$'; KW_ELEM_TYPE: '$ELEM$'; @@ -959,6 +994,7 @@ BITWISEOR : '|'; BITWISEXOR : '^'; + // LITERALS fragment Letter Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -50,6 +50,9 @@ import org.apache.hadoop.hive.ql.optimizer.GenMRFileSink1; import org.apache.hadoop.hive.ql.optimizer.GenMRRedSink1; import org.apache.hadoop.hive.ql.optimizer.GenMRRedSink2; +import org.apache.hadoop.hive.ql.optimizer.GenMRMapSink1; +import org.apache.hadoop.hive.ql.optimizer.GenMRMapSink2; +import org.apache.hadoop.hive.ql.optimizer.GenMRMapSink3; import org.apache.hadoop.hive.ql.plan.*; import org.apache.hadoop.hive.ql.typeinfo.TypeInfo; import org.apache.hadoop.hive.ql.typeinfo.TypeInfoFactory; @@ -69,7 +72,6 @@ /** * Implementation of the semantic analyzer */ - public class SemanticAnalyzer extends BaseSemanticAnalyzer { private HashMap aliasToPruner; private HashMap aliasToSamplePruner; @@ -78,6 +80,7 @@ private HashMap, OpParseContext> opParseCtx; private List loadTableWork; private List loadFileWork; + private Map joinContext; private QB qb; private ASTNode ast; @@ -97,16 +100,20 @@ this.loadTableWork = new ArrayList(); this.loadFileWork = new ArrayList(); opParseCtx = new HashMap, OpParseContext>(); + joinContext = new HashMap(); } @Override protected void reset() { super.reset(); this.aliasToPruner.clear(); + this.aliasToSamplePruner.clear(); this.loadTableWork.clear(); this.loadFileWork.clear(); this.topOps.clear(); this.topSelOps.clear(); + this.joinContext.clear(); + this.opParseCtx.clear(); qb = null; ast = null; } @@ -119,12 +126,13 @@ opParseCtx = pctx.getOpParseCtx(); loadTableWork = pctx.getLoadTableWork(); loadFileWork = pctx.getLoadFileWork(); + joinContext = pctx.getJoinContext(); ctx = pctx.getContext(); } public ParseContext getParseContext() { return new ParseContext(conf, qb, ast, aliasToPruner, aliasToSamplePruner, topOps, - topSelOps, opParseCtx, loadTableWork, loadFileWork, ctx); + topSelOps, opParseCtx, joinContext, loadTableWork, loadFileWork, ctx); } @SuppressWarnings("nls") @@ -289,6 +297,7 @@ if (qb.exists(alias)) { throw new SemanticException(ErrorMsg.AMBIGOUS_TABLE_ALIAS.getMsg(subq.getChild(1))); } + // Insert this map into the stats qb.setSubqAlias(alias, qbexpr); } @@ -337,7 +346,12 @@ case HiveParser.TOK_SELECT: qb.countSel(); qbp.setSelExprForClause(ctx_1.dest, ast); + + if (((ASTNode)ast.getChild(0)).getToken().getType() == HiveParser.TOK_HINTLIST) + qbp.setHints((ASTNode)ast.getChild(0)); + HashMap aggregations = doPhase1GetAggregationsFromSelect(ast); + qbp.setAggregationExprsForClause(ctx_1.dest, aggregations); qbp.setDistinctFuncExprForClause(ctx_1.dest, doPhase1GetDistinctFuncExpr(aggregations)); @@ -1108,6 +1122,11 @@ // list of the columns ASTNode selExpr = (ASTNode) selExprList.getChild(i); String colAlias = getColAlias(selExpr, "_C" + i); + + // ignore hints + if (selExpr.getToken().getType() == HiveParser.TOK_HINTLIST) + continue; + ASTNode sel = (ASTNode)selExpr.getChild(0); if (sel.getToken().getType() == HiveParser.TOK_ALLCOLREF) { @@ -2251,7 +2270,7 @@ return output; } - private Operator genJoinOperatorChildren(QBJoinTree join, Operator left, Operator[] right) + private JoinOperator genJoinOperatorChildren(QBJoinTree join, Operator left, Operator[] right) throws SemanticException { RowResolver outputRS = new RowResolver(); // all children are base classes @@ -2295,7 +2314,7 @@ joinCondns[i] = new org.apache.hadoop.hive.ql.plan.joinCond(condn); } - return putOpInsertMap( + return (JoinOperator)putOpInsertMap( OperatorFactory.getAndMakeChild(new joinDesc(exprMap, joinCondns), new RowSchema(outputRS.getColumnInfos()), rightOps), outputRS); } @@ -2340,6 +2359,14 @@ child), outputRS); } + /** + * generate the join operator + * @param qb query block + * @param joinTree join tree + * @param map table operators map + * @return + * @throws SemanticException + */ private Operator genJoinOperator(QB qb, QBJoinTree joinTree, HashMap map) throws SemanticException { QBJoinTree leftChild = joinTree.getJoinSrc(); @@ -2370,7 +2397,9 @@ // Type checking and implicit type conversion for join keys genJoinOperatorTypeCheck(joinSrcOp, srcOps); - return genJoinOperatorChildren(joinTree, joinSrcOp, srcOps); + JoinOperator joinOp = genJoinOperatorChildren(joinTree, joinSrcOp, srcOps); + joinContext.put(joinOp, joinTree); + return joinOp; } private void genJoinOperatorTypeCheck(Operator left, Operator[] right) throws SemanticException { @@ -2449,7 +2478,28 @@ } } - private QBJoinTree genJoinTree(ASTNode joinParseTree) + private List getMapSideJoinTables(QB qb) { + List cols = null; + ASTNode hints = qb.getParseInfo().getHints(); + for (int pos = 0; pos < hints.getChildCount(); pos++) { + ASTNode hint = (ASTNode)hints.getChild(pos); + if (((ASTNode)hint.getChild(0)).getToken().getType() == HiveParser.TOK_MAPJOIN) { + ASTNode hintTblNames = (ASTNode)hint.getChild(1); + int numCh = hintTblNames.getChildCount(); + for (int tblPos = 0; tblPos < numCh; tblPos++) { + String tblName = ((ASTNode)hintTblNames.getChild(tblPos)).getText(); + if (cols == null) + cols = new ArrayList(); + if (!cols.contains(tblName)) + cols.add(tblName); + } + } + } + + return cols; + } + + private QBJoinTree genJoinTree(QB qb, ASTNode joinParseTree) throws SemanticException { QBJoinTree joinTree = new QBJoinTree(); joinCond[] condn = new joinCond[1]; @@ -2494,7 +2544,7 @@ joinTree.setBaseSrc(children); } else if (isJoinToken(left)) { - QBJoinTree leftTree = genJoinTree(left); + QBJoinTree leftTree = genJoinTree(qb, left); joinTree.setJoinSrc(leftTree); String[] leftChildAliases = leftTree.getLeftAliases(); String leftAliases[] = new String[leftChildAliases.length + 1]; @@ -2537,6 +2587,35 @@ if (leftSrc.size() == 1) joinTree.setLeftAlias(leftSrc.get(0)); + // check the hints to see if the user has specified a map-side join. This will be removed later on, once the cost-based + // infrastructure is in place + if (qb.getParseInfo().getHints() != null) { + List mapSideTables = getMapSideJoinTables(qb); + List mapAliases = joinTree.getMapAliases(); + + for (String mapTbl : mapSideTables) { + boolean mapTable = false; + for (String leftAlias : joinTree.getLeftAliases()) { + if (mapTbl.equals(leftAlias)) + mapTable = true; + } + for (String rightAlias : joinTree.getRightAliases()) { + if (mapTbl.equals(rightAlias)) + mapTable = true; + } + + if (mapTable) { + if (mapAliases == null) { + mapAliases = new ArrayList(); + } + mapAliases.add(mapTbl); + joinTree.setMapSideJoin(true); + } + } + + joinTree.setMapAliases(mapAliases); + } + return joinTree; } @@ -2606,6 +2685,16 @@ } target.setJoinCond(newCondns); + + if (target.isMapSideJoin()) { + assert node.isMapSideJoin(); + List mapAliases = target.getMapAliases(); + for (String mapTbl : node.getMapAliases()) + if (!mapAliases.contains(mapTbl)) + mapAliases.add(mapTbl); + target.setMapAliases(mapAliases); + } + } private int findMergePos(QBJoinTree node, QBJoinTree target) { @@ -2883,6 +2972,10 @@ } // Create the root of the operator tree + + // top = putOpInsertMap(OperatorFactory.get(new tableScanDesc(tab.getPath(), Utilities.getTableDesc(tab)), + // new RowSchema(rwsch.getColumnInfos())), rwsch); + top = putOpInsertMap(OperatorFactory.get(tableScanDesc.class, new RowSchema(rwsch.getColumnInfos())), rwsch); // Add this to the list of top operators - we always start from a table scan @@ -2987,6 +3080,7 @@ // Recurse over the subqueries to fill the subquery part of the plan for (String alias : qb.getSubqAliases()) { QBExpr qbexpr = qb.getSubqForAlias(alias); + aliasToOpInfo.put(alias, genPlan(qbexpr)); qbexpr.setAlias(alias); } @@ -3001,7 +3095,7 @@ // process join if (qb.getParseInfo().getJoinExpr() != null) { ASTNode joinExpr = qb.getParseInfo().getJoinExpr(); - QBJoinTree joinTree = genJoinTree(joinExpr); + QBJoinTree joinTree = genJoinTree(qb, joinExpr); qb.setQbJoinTree(joinTree); mergeJoinTree(qb); @@ -3060,15 +3154,15 @@ Table tab = ((Map.Entry)iter.next()).getValue(); if (!tab.isPartitioned()) { if (qbParseInfo.getDestToWhereExpr().isEmpty()) - fetch = new fetchWork(tab.getPath(), Utilities.getTableDesc(tab), qb.getParseInfo().getOuterQueryLimit()); + fetch = new fetchWork(tab.getPath().toString(), Utilities.getTableDesc(tab), qb.getParseInfo().getOuterQueryLimit()); } else { if (aliasToPruner.size() == 1) { Iterator> iterP = aliasToPruner.entrySet().iterator(); PartitionPruner pr = ((Map.Entry)iterP.next()).getValue(); if (pr.containsPartitionCols()) { - List listP = new ArrayList(); - List partP = new ArrayList(); + ArrayList listP = new ArrayList(); + ArrayList partP = new ArrayList(); PartitionPruner.PrunedPartitionList partsList = null; Set parts = null; try { @@ -3082,7 +3176,7 @@ listP.add(part.getPartitionPath()); partP.add(Utilities.getPartitionDesc(part)); } - fetch = new fetchWork(listP, partP, qb.getParseInfo().getOuterQueryLimit()); + fetch = new fetchWork(fetchWork.convertPathToStringArray(listP), partP, qb.getParseInfo().getOuterQueryLimit()); } } catch (HiveException e) { // Has to use full name to make sure it does not conflict with org.apache.commons.lang.StringUtils @@ -3105,7 +3199,7 @@ throw new SemanticException(ErrorMsg.GENERIC_ERROR.getMsg()); String cols = loadFileWork.get(0).getColumns(); - fetch = new fetchWork(new Path(loadFileWork.get(0).getSourceDir()), + fetch = new fetchWork(loadFileWork.get(0).getSourceDir(), new tableDesc(MetadataTypedColumnsetSerDe.class, TextInputFormat.class, IgnoreKeyTextOutputFormat.class, Utilities.makeProperties( @@ -3133,11 +3227,15 @@ // create a walker which walks the tree in a DFS manner while maintaining the operator stack. The dispatcher // generates the plan from the operator tree + Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp(new String("R1"), "TS%"), new GenMRTableScan1()); - opRules.put(new RuleRegExp(new String("R2"), "TS%.*RS%"), new GenMRRedSink1()); - opRules.put(new RuleRegExp(new String("R3"), "RS%.*RS%"), new GenMRRedSink2()); - opRules.put(new RuleRegExp(new String("R4"), "FS%"), new GenMRFileSink1()); + opRules.put(new RuleRegExp(new String("RuleTableScan"), "TS%"), new GenMRTableScan1()); + opRules.put(new RuleRegExp(new String("RuleTableScanFollowedByReduceSink"), "TS%.*RS%"), new GenMRRedSink1()); + opRules.put(new RuleRegExp(new String("RuleTableScanFollowedByMapSink"), "TS%.*MS%"), new GenMRMapSink1()); + opRules.put(new RuleRegExp(new String("RuleReduceSinkFollowedByReduceSink"), "RS%.*RS%"), new GenMRRedSink2()); + opRules.put(new RuleRegExp(new String("RuleMapSinkFollowedByMapSink"), "MS%.*MS%"), new GenMRMapSink2()); + opRules.put(new RuleRegExp(new String("RuleReduceSinkFollowedByMapSink"), "RS%.*MS%"), new GenMRMapSink3()); + opRules.put(new RuleRegExp(new String("RuleFileSink"), "FS%"), new GenMRFileSink1()); // The dispatcher fires the processor corresponding to the closest matching rule and passes the context along Dispatcher disp = new DefaultRuleDispatcher(new GenMROperator(), opRules, procCtx); @@ -3198,7 +3296,7 @@ genPlan(qb); ParseContext pCtx = new ParseContext(conf, qb, ast, aliasToPruner, aliasToSamplePruner, topOps, - topSelOps, opParseCtx, loadTableWork, loadFileWork, ctx); + topSelOps, opParseCtx, joinContext, loadTableWork, loadFileWork, ctx); Optimizer optm = new Optimizer(); optm.setPctx(pCtx); @@ -3206,7 +3304,7 @@ pCtx = optm.optimize(); init(pCtx); qb = pCtx.getQB(); - + // Do any partition pruning genPartitionPruners(qb); LOG.info("Completed partition pruning"); @@ -3223,7 +3321,6 @@ genMapRedTasks(qb); LOG.info("Completed plan generation"); - return; } @@ -3332,7 +3429,7 @@ * @throws SemanticException */ @SuppressWarnings("nls") - private exprNodeDesc genExprNodeDesc(QBMetaData qbm, ASTNode expr, RowResolver input) + public static exprNodeDesc genExprNodeDesc(QBMetaData qbm, ASTNode expr, RowResolver input) throws SemanticException { // We recursively create the exprNodeDesc. Base cases: when we encounter // a column ref, we convert that into an exprNodeColumnDesc; when we encounter Index: ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java (revision 729990) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java (working copy) @@ -21,8 +21,10 @@ import java.io.Serializable; import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.JoinOperator; import org.apache.hadoop.hive.ql.plan.loadFileDesc; import org.apache.hadoop.hive.ql.plan.loadTableDesc; import org.apache.hadoop.hive.ql.Context; @@ -46,6 +48,7 @@ private HashMap> topOps; private HashMap> topSelOps; private HashMap, OpParseContext> opParseCtx; + private Map joinContext; private List loadTableWork; private List loadFileWork; private Context ctx; @@ -67,6 +70,8 @@ * @param opParseCtx * operator parse context - contains a mapping from operator to * operator parse state (row resolver etc.) + * @param joinContext + * operator to join tree mapping - needed for join transformations (regular to mapside etc.) * @param topOps * list of operators for the top query * @param topSelOps @@ -78,6 +83,7 @@ HashMap> topOps, HashMap> topSelOps, HashMap, OpParseContext> opParseCtx, + Map joinContext, List loadTableWork, List loadFileWork, Context ctx) { this.conf = conf; @@ -88,6 +94,7 @@ this.loadFileWork = loadFileWork; this.loadTableWork = loadTableWork; this.opParseCtx = opParseCtx; + this.joinContext = joinContext; this.topOps = topOps; this.topSelOps = topSelOps; this.ctx = ctx; @@ -260,4 +267,18 @@ public void setLoadFileWork(List loadFileWork) { this.loadFileWork = loadFileWork; } + + /** + * @return the joinContext + */ + public Map getJoinContext() { + return joinContext; + } + + /** + * @param joinContext the joinContext to set + */ + public void setJoinContext(Map joinContext) { + this.joinContext = joinContext; + } }