Index: metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java =================================================================== --- metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java (revision 1201807) +++ metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java (working copy) @@ -304,7 +304,7 @@ * if it doesn't match the pattern. */ static public boolean validateName(String name) { - Pattern tpat = Pattern.compile("[\\w_]+"); + Pattern tpat = Pattern.compile("[\\w]+"); Matcher m = tpat.matcher(name); if (m.matches()) { return true; Index: ql/src/test/results/clientnegative/ctas_group_by_failure1.q.out =================================================================== --- ql/src/test/results/clientnegative/ctas_group_by_failure1.q.out (revision 0) +++ ql/src/test/results/clientnegative/ctas_group_by_failure1.q.out (revision 0) @@ -0,0 +1,11 @@ +PREHOOK: query: create table a_b (c string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table a_b (c string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@a_b +PREHOOK: query: create table a (b_c string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table a (b_c string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@a +FAILED: Error in semantic analysis: Duplicate column name: a_b_c Index: ql/src/test/results/clientpositive/input48.q.out =================================================================== --- ql/src/test/results/clientpositive/input48.q.out (revision 0) +++ ql/src/test/results/clientpositive/input48.q.out (revision 0) @@ -0,0 +1,382 @@ +PREHOOK: query: create table z as select * from src group by key +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +POSTHOOK: query: create table z as select * from src group by key +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Output: default@z +PREHOOK: query: describe z +PREHOOK: type: DESCTABLE +POSTHOOK: query: describe z +POSTHOOK: type: DESCTABLE +key string +PREHOOK: query: create table zz as select * from src group by key, value +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +POSTHOOK: query: create table zz as select * from src group by key, value +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Output: default@zz +PREHOOK: query: describe zz +PREHOOK: type: DESCTABLE +POSTHOOK: query: describe zz +POSTHOOK: type: DESCTABLE +key string +value string +PREHOOK: query: create table zzz as select * from src join zz on src.key = zz.key group by src.key, zz.key, src.value +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +PREHOOK: Input: default@zz +POSTHOOK: query: create table zzz as select * from src join zz on src.key = zz.key group by src.key, zz.key, src.value +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Input: default@zz +POSTHOOK: Output: default@zzz +PREHOOK: query: describe zzz +PREHOOK: type: DESCTABLE +POSTHOOK: query: describe zzz +POSTHOOK: type: DESCTABLE +src_key string +zz_key string +src_value string +PREHOOK: query: select * from zzz +PREHOOK: type: QUERY +PREHOOK: Input: default@zzz +PREHOOK: Output: file:/tmp/rsurowka/hive_2011-11-14_09-47-28_534_8156198835723761029/-mr-10000 +POSTHOOK: query: select * from zzz +POSTHOOK: type: QUERY +POSTHOOK: Input: default@zzz +POSTHOOK: Output: file:/tmp/rsurowka/hive_2011-11-14_09-47-28_534_8156198835723761029/-mr-10000 +0 0 val_0 +10 10 val_10 +100 100 val_100 +103 103 val_103 +104 104 val_104 +105 105 val_105 +11 11 val_11 +111 111 val_111 +113 113 val_113 +114 114 val_114 +116 116 val_116 +118 118 val_118 +119 119 val_119 +12 12 val_12 +120 120 val_120 +125 125 val_125 +126 126 val_126 +128 128 val_128 +129 129 val_129 +131 131 val_131 +133 133 val_133 +134 134 val_134 +136 136 val_136 +137 137 val_137 +138 138 val_138 +143 143 val_143 +145 145 val_145 +146 146 val_146 +149 149 val_149 +15 15 val_15 +150 150 val_150 +152 152 val_152 +153 153 val_153 +155 155 val_155 +156 156 val_156 +157 157 val_157 +158 158 val_158 +160 160 val_160 +162 162 val_162 +163 163 val_163 +164 164 val_164 +165 165 val_165 +166 166 val_166 +167 167 val_167 +168 168 val_168 +169 169 val_169 +17 17 val_17 +170 170 val_170 +172 172 val_172 +174 174 val_174 +175 175 val_175 +176 176 val_176 +177 177 val_177 +178 178 val_178 +179 179 val_179 +18 18 val_18 +180 180 val_180 +181 181 val_181 +183 183 val_183 +186 186 val_186 +187 187 val_187 +189 189 val_189 +19 19 val_19 +190 190 val_190 +191 191 val_191 +192 192 val_192 +193 193 val_193 +194 194 val_194 +195 195 val_195 +196 196 val_196 +197 197 val_197 +199 199 val_199 +2 2 val_2 +20 20 val_20 +200 200 val_200 +201 201 val_201 +202 202 val_202 +203 203 val_203 +205 205 val_205 +207 207 val_207 +208 208 val_208 +209 209 val_209 +213 213 val_213 +214 214 val_214 +216 216 val_216 +217 217 val_217 +218 218 val_218 +219 219 val_219 +221 221 val_221 +222 222 val_222 +223 223 val_223 +224 224 val_224 +226 226 val_226 +228 228 val_228 +229 229 val_229 +230 230 val_230 +233 233 val_233 +235 235 val_235 +237 237 val_237 +238 238 val_238 +239 239 val_239 +24 24 val_24 +241 241 val_241 +242 242 val_242 +244 244 val_244 +247 247 val_247 +248 248 val_248 +249 249 val_249 +252 252 val_252 +255 255 val_255 +256 256 val_256 +257 257 val_257 +258 258 val_258 +26 26 val_26 +260 260 val_260 +262 262 val_262 +263 263 val_263 +265 265 val_265 +266 266 val_266 +27 27 val_27 +272 272 val_272 +273 273 val_273 +274 274 val_274 +275 275 val_275 +277 277 val_277 +278 278 val_278 +28 28 val_28 +280 280 val_280 +281 281 val_281 +282 282 val_282 +283 283 val_283 +284 284 val_284 +285 285 val_285 +286 286 val_286 +287 287 val_287 +288 288 val_288 +289 289 val_289 +291 291 val_291 +292 292 val_292 +296 296 val_296 +298 298 val_298 +30 30 val_30 +302 302 val_302 +305 305 val_305 +306 306 val_306 +307 307 val_307 +308 308 val_308 +309 309 val_309 +310 310 val_310 +311 311 val_311 +315 315 val_315 +316 316 val_316 +317 317 val_317 +318 318 val_318 +321 321 val_321 +322 322 val_322 +323 323 val_323 +325 325 val_325 +327 327 val_327 +33 33 val_33 +331 331 val_331 +332 332 val_332 +333 333 val_333 +335 335 val_335 +336 336 val_336 +338 338 val_338 +339 339 val_339 +34 34 val_34 +341 341 val_341 +342 342 val_342 +344 344 val_344 +345 345 val_345 +348 348 val_348 +35 35 val_35 +351 351 val_351 +353 353 val_353 +356 356 val_356 +360 360 val_360 +362 362 val_362 +364 364 val_364 +365 365 val_365 +366 366 val_366 +367 367 val_367 +368 368 val_368 +369 369 val_369 +37 37 val_37 +373 373 val_373 +374 374 val_374 +375 375 val_375 +377 377 val_377 +378 378 val_378 +379 379 val_379 +382 382 val_382 +384 384 val_384 +386 386 val_386 +389 389 val_389 +392 392 val_392 +393 393 val_393 +394 394 val_394 +395 395 val_395 +396 396 val_396 +397 397 val_397 +399 399 val_399 +4 4 val_4 +400 400 val_400 +401 401 val_401 +402 402 val_402 +403 403 val_403 +404 404 val_404 +406 406 val_406 +407 407 val_407 +409 409 val_409 +41 41 val_41 +411 411 val_411 +413 413 val_413 +414 414 val_414 +417 417 val_417 +418 418 val_418 +419 419 val_419 +42 42 val_42 +421 421 val_421 +424 424 val_424 +427 427 val_427 +429 429 val_429 +43 43 val_43 +430 430 val_430 +431 431 val_431 +432 432 val_432 +435 435 val_435 +436 436 val_436 +437 437 val_437 +438 438 val_438 +439 439 val_439 +44 44 val_44 +443 443 val_443 +444 444 val_444 +446 446 val_446 +448 448 val_448 +449 449 val_449 +452 452 val_452 +453 453 val_453 +454 454 val_454 +455 455 val_455 +457 457 val_457 +458 458 val_458 +459 459 val_459 +460 460 val_460 +462 462 val_462 +463 463 val_463 +466 466 val_466 +467 467 val_467 +468 468 val_468 +469 469 val_469 +47 47 val_47 +470 470 val_470 +472 472 val_472 +475 475 val_475 +477 477 val_477 +478 478 val_478 +479 479 val_479 +480 480 val_480 +481 481 val_481 +482 482 val_482 +483 483 val_483 +484 484 val_484 +485 485 val_485 +487 487 val_487 +489 489 val_489 +490 490 val_490 +491 491 val_491 +492 492 val_492 +493 493 val_493 +494 494 val_494 +495 495 val_495 +496 496 val_496 +497 497 val_497 +498 498 val_498 +5 5 val_5 +51 51 val_51 +53 53 val_53 +54 54 val_54 +57 57 val_57 +58 58 val_58 +64 64 val_64 +65 65 val_65 +66 66 val_66 +67 67 val_67 +69 69 val_69 +70 70 val_70 +72 72 val_72 +74 74 val_74 +76 76 val_76 +77 77 val_77 +78 78 val_78 +8 8 val_8 +80 80 val_80 +82 82 val_82 +83 83 val_83 +84 84 val_84 +85 85 val_85 +86 86 val_86 +87 87 val_87 +9 9 val_9 +90 90 val_90 +92 92 val_92 +95 95 val_95 +96 96 val_96 +97 97 val_97 +98 98 val_98 +PREHOOK: query: drop table z +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@z +PREHOOK: Output: default@z +POSTHOOK: query: drop table z +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@z +POSTHOOK: Output: default@z +PREHOOK: query: drop table zz +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@zz +PREHOOK: Output: default@zz +POSTHOOK: query: drop table zz +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@zz +POSTHOOK: Output: default@zz +PREHOOK: query: drop table zzz +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@zzz +PREHOOK: Output: default@zzz +POSTHOOK: query: drop table zzz +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@zzz +POSTHOOK: Output: default@zzz Index: ql/src/test/queries/clientnegative/ctas_group_by_failure1.q =================================================================== --- ql/src/test/queries/clientnegative/ctas_group_by_failure1.q (revision 0) +++ ql/src/test/queries/clientnegative/ctas_group_by_failure1.q (revision 0) @@ -0,0 +1,3 @@ +create table a_b (c string); +create table a (b_c string); +create table abc as select * from a_b join a on a_b.c = a.b_c group by a_b.c, a.b_c; Index: ql/src/test/queries/clientpositive/input48.q =================================================================== --- ql/src/test/queries/clientpositive/input48.q (revision 0) +++ ql/src/test/queries/clientpositive/input48.q (revision 0) @@ -0,0 +1,10 @@ +create table z as select * from src group by key; +describe z; +create table zz as select * from src group by key, value; +describe zz; +create table zzz as select * from src join zz on src.key = zz.key group by src.key, zz.key, src.value; +describe zzz; +select * from zzz; +drop table z; +drop table zz; +drop table zzz; \ No newline at end of file Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 1201807) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -48,6 +48,7 @@ import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.QueryProperties; import org.apache.hadoop.hive.ql.exec.AbstractMapJoinOperator; +import org.apache.hadoop.hive.ql.exec.ArchiveUtils; import org.apache.hadoop.hive.ql.exec.ColumnInfo; import org.apache.hadoop.hive.ql.exec.ConditionalTask; import org.apache.hadoop.hive.ql.exec.ExecDriver; @@ -58,7 +59,6 @@ import org.apache.hadoop.hive.ql.exec.GroupByOperator; import org.apache.hadoop.hive.ql.exec.JoinOperator; import org.apache.hadoop.hive.ql.exec.MapRedTask; -import org.apache.hadoop.hive.ql.exec.ArchiveUtils; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.OperatorFactory; import org.apache.hadoop.hive.ql.exec.RecordReader; @@ -1532,15 +1532,6 @@ throw new SemanticException(ErrorMsg.INVALID_TABLE_ALIAS.getMsg(sel)); } - // TODO: Have to put in the support for AS clause - Pattern regex = null; - try { - regex = Pattern.compile(colRegex, Pattern.CASE_INSENSITIVE); - } catch (PatternSyntaxException e) { - throw new SemanticException(ErrorMsg.INVALID_COLUMN.getMsg(sel, e - .getMessage())); - } - StringBuilder replacementText = new StringBuilder(); int matched = 0; // add empty string to the list of aliases. Some operators (ex. GroupBy) add @@ -1571,9 +1562,22 @@ continue; } + // TODO: Have to put in the support for AS clause + Pattern regex = null; + try { + regex = Pattern.compile(colRegex); + } catch (PatternSyntaxException e) { + throw new SemanticException(ErrorMsg.INVALID_COLUMN.getMsg(sel, e + .getMessage())); + } + // Not matching the regex? if (!regex.matcher(tmp[1]).matches()) { - continue; + tmp[1] = tmp[1].replaceAll("\\(tok_table_or_col ", "").replaceAll("\\)", "") + .replaceAll("\\(", "").replaceAll("\\.", "").trim().replaceAll(" +", "_"); + if (!regex.matcher(tmp[1]).matches()) { + continue; + } } ExprNodeColumnDesc expr = new ExprNodeColumnDesc(colInfo.getType(), @@ -2223,7 +2227,7 @@ } if (expr.getType() == HiveParser.TOK_ALLCOLREF) { - pos = genColListRegex(".*", expr.getChildCount() == 0 ? null + pos = genColListRegex("[\\w]+", expr.getChildCount() == 0 ? null : getUnescapedName((ASTNode)expr.getChild(0)).toLowerCase(), expr, col_list, inputRR, pos, out_rwsch, qb.getAliases()); selectStar = true;