1515 limitations under the License.
1616"""
1717from dataclasses import dataclass
18- from typing import Dict , ClassVar
19-
18+ from typing import Dict , ClassVar , Optional
2019
2120from dbt .adapters .base .column import Column
2221from dbt .adapters .oracle .keyword_catalog import KEYWORDS
@@ -36,17 +35,20 @@ class OracleColumn(Column):
3635 STRING_DATATYPES = {'char' , 'nchar' , 'varchar' , 'varchar2' , 'nvarchar2' }
3736 NUMBER_DATATYPES = {'number' , 'float' }
3837
38+ char_length_unit : Optional [str ] = None
39+
3940 @property
4041 def data_type (self ) -> str :
4142 if self .is_string ():
42- return self .oracle_string_type (self .dtype , self .string_size ())
43+ return self .oracle_string_type (self .dtype , self .string_size (), self . char_length_unit )
4344 elif self .is_numeric ():
4445 return self .numeric_type (self .dtype , self .numeric_precision , self .numeric_scale )
4546 else :
4647 return self .dtype
4748
4849 @classmethod
49- def oracle_string_type (cls , dtype : str , size : int = None ):
50+ def oracle_string_type (cls , dtype : str , size : int = None ,
51+ char_length_unit : str = None ):
5052 """
5153 - CHAR(SIZE)
5254 - VARCHAR2(SIZE)
@@ -55,6 +57,8 @@ def oracle_string_type(cls, dtype: str, size: int = None):
5557 """
5658 if size is None :
5759 return dtype
60+ elif char_length_unit and char_length_unit .upper () == 'C' :
61+ return "{}({} CHAR)" .format (dtype , size )
5862 else :
5963 return "{}({})" .format (dtype , size )
6064
0 commit comments