@@ -345,27 +345,30 @@ def _prepare_tables(self, table: Union[str, list, dict]) -> str:
345345
346346 return self ._prepare_aliases (table )
347347
348- def select (self , table : Union [str , list , dict ], fields : Union [str , list , dict ] = "*" ):
348+ def select (self , table : Union [str , list , dict ], fields : Union [str , list , dict ] = "*" , dist : bool = False ):
349349 if not table or not fields :
350350 self .set_error (f"Empty table or fields in { inspect .stack ()[0 ][3 ]} method" )
351351 return self
352352
353- if isinstance (fields , dict ) or isinstance (fields , list ) or isinstance (fields , str ):
354- if self ._concat :
355- self ._sql += f"SELECT { self ._prepare_aliases (fields )} "
356- else :
357- self .reset ()
358- self ._sql = f"SELECT { self ._prepare_aliases (fields )} "
359- self ._fields = fields
353+ prepared_table = self ._prepare_tables (table )
354+ prepared_fields = self ._prepare_aliases (fields )
355+
356+ if not self ._concat :
357+ self .reset ()
358+
359+ sql = 'SELECT '
360+ sql += 'DISTINCT ' if dist else ''
361+ if isinstance (table , str ) and any (x in table for x in self ._FIELD_SPEC_CHARS ) and fields == '*' :
362+ sql += f"{ prepared_table } "
363+ self ._fields = self ._prepare_aliases (table )
360364 else :
361- self .set_error ( f"Incorrect type of fields in { inspect . stack ()[ 0 ][ 3 ] } method. Fields must be String, List or Dictionary" )
362- return self
365+ self ._fields = fields
366+ sql += f" { prepared_fields } FROM { prepared_table } "
363367
364- if isinstance ( table , dict ) or isinstance ( table , list ) or isinstance ( table , str ) :
365- self ._prepare_tables ( table )
368+ if self . _concat :
369+ self ._sql += sql
366370 else :
367- self .set_error (f"Incorrect type of table in { inspect .stack ()[0 ][3 ]} method. Table must be String or Dictionary" )
368- return self
371+ self ._sql = sql
369372
370373 return self
371374
0 commit comments