module Sqel.Text.DbIdentifier where

import Data.List (dropWhileEnd)

import Sqel.SOP.Constraint (symbolString)
import Sqel.Text.Case (unCamelCase)
import Sqel.Text.Quote (dquote)

dbIdentifier :: String -> Text
dbIdentifier :: String -> Text
dbIdentifier =
  Char -> String -> Text
unCamelCase Char
'_' forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
dropWhile (Char
'_' forall a. Eq a => a -> a -> Bool
==) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
dropWhileEnd (Char
'_' forall a. Eq a => a -> a -> Bool
==)

dbIdentifierT :: Text -> Text
dbIdentifierT :: Text -> Text
dbIdentifierT =
  String -> Text
dbIdentifier forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToString a => a -> String
toString

quotedDbId :: Text -> Text
quotedDbId :: Text -> Text
quotedDbId =
  forall a. Exon a => a -> a
dquote forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
dbIdentifierT

dbSymbol ::
   name .
  KnownSymbol name =>
  Text
dbSymbol :: forall (name :: Symbol). KnownSymbol name => Text
dbSymbol =
  String -> Text
dbIdentifier (forall (name :: Symbol). KnownSymbol name => String
symbolString @name)