Committed by =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <
ilm...@ilmari.org>
Subject: [DBD::Pg 3/5] Use named enum values for placeholder_type
---
dbdimp.c | 36 ++++++++++++++++++------------------
dbdimp.h | 11 ++++++++++-
2 files changed, 28 insertions(+), 19 deletions(-)
diff --git a/dbdimp.c b/dbdimp.c
index 9e97701..c50279e 100644
--- a/dbdimp.c
+++ b/dbdimp.c
@@ -1000,7 +1000,7 @@ int dbd_db_STORE_attrib (SV * dbh, imp_dbh_t * imp_dbh, SV * keysv, SV * valuesv
} /* end of dbd_db_STORE_attrib */
static SV * pg_st_placeholder_key (imp_sth_t * imp_sth, ph_t * currph, int i) {
- if (3 == imp_sth->placeholder_type)
+ if (PLACEHOLDER_COLON == imp_sth->placeholder_type)
return newSVpv(currph->fooname, 0);
return newSViv(i+1);
}
@@ -1566,7 +1566,7 @@ int dbd_st_prepare_sv (SV * sth, imp_sth_t * imp_sth, SV * statement_sv, SV * at
croak ("Cannot prepare empty statement");
/* Set default values for this statement handle */
- imp_sth->placeholder_type = 0;
+ imp_sth->placeholder_type = PLACEHOLDER_NONE;
imp_sth->numsegs = 0;
imp_sth->numphs = 0;
imp_sth->numbound = 0;
@@ -1698,7 +1698,7 @@ int dbd_st_prepare_sv (SV * sth, imp_sth_t * imp_sth, SV * statement_sv, SV * at
} /* end of dbd_st_prepare */
-static const char *placeholder_string[4] = {
+static const char *placeholder_string[PLACEHOLDER_TYPE_COUNT] = {
"", "?", "$1", ":foo"
};
@@ -1722,7 +1722,7 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
int topdollar; /* Used to enforce sequential $1 arguments */
- int placeholder_type; /* Which type we are in: one of 0,1,2,3 (none,?,$,:) */
+ PGPlaceholderType placeholder_type; /* Which type we are in: one of none,?,$,: */
unsigned char ch; /* The current character being checked */
@@ -2018,7 +2018,7 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
sectionstop=currpos-1;
/* Figure out if we have a placeholder */
- placeholder_type = 0;
+ placeholder_type = PLACEHOLDER_NONE;
/* Dollar sign placeholder style */
if ('$' == ch && isDIGIT(*statement)) {
@@ -2028,12 +2028,12 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
++statement;
++currpos;
}
- placeholder_type = 2;
+ placeholder_type = PLACEHOLDER_DOLLAR;
}
else if (! imp_sth->dollaronly) {
/* Question mark style */
if ('?' == ch) {
- placeholder_type = 1;
+ placeholder_type = PLACEHOLDER_QUESTIONMARK;
}
/* Colon style */
else if (':' == ch && ! imp_sth->nocolons) {
@@ -2061,13 +2061,13 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
++statement;
++currpos;
}
- placeholder_type = 3;
+ placeholder_type = PLACEHOLDER_COLON;
}
}
}
/* Check for conflicting placeholder types */
- if (placeholder_type!=0) {
+ if (placeholder_type != PLACEHOLDER_NONE) {
if (imp_sth->placeholder_type && placeholder_type != imp_sth->placeholder_type)
croak("Cannot mix placeholder styles \"%s\" and \"%s\"",
placeholder_string[imp_sth->placeholder_type],
@@ -2075,7 +2075,7 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
}
/* Move on to the next letter unless we found a placeholder, or we are at the end of the string */
- if (0==placeholder_type && ch)
+ if (PLACEHOLDER_NONE == placeholder_type && ch)
continue;
/* If we got here, we have a segment that needs to be saved */
@@ -2084,13 +2084,13 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
newseg->placeholder = 0;
newseg->ph = NULL;
- if (1==placeholder_type) {
+ if (PLACEHOLDER_QUESTIONMARK == placeholder_type) {
newseg->placeholder = ++imp_sth->numphs;
}
- else if (2==placeholder_type) {
+ else if (PLACEHOLDER_DOLLAR == placeholder_type) {
newseg->placeholder = atoi(statement-(currpos-sectionstop-1));
}
- else if (3==placeholder_type) {
+ else if (PLACEHOLDER_COLON == placeholder_type) {
sectionsize = currpos-sectionstop;
/* Have we seen this placeholder yet? */
for (xint=1,thisph=imp_sth->ph; NULL != thisph; thisph=thisph->nextph,xint++) {
@@ -2157,7 +2157,7 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
sectionstart = currpos;
imp_sth->numsegs++;
- if (placeholder_type > 0)
+ if (placeholder_type != PLACEHOLDER_NONE)
imp_sth->placeholder_type = placeholder_type;
/*
@@ -2171,7 +2171,7 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
} /* end large while(1) loop: statement parsing */
/* For dollar sign placeholders, ensure that the rules are followed */
- if (2==imp_sth->placeholder_type) {
+ if (PLACEHOLDER_DOLLAR == imp_sth->placeholder_type) {
/*
We follow the Pg rules: must start with $1, repeats are allowed,
numbers must be sequential. We change numphs if repeats found
@@ -2197,7 +2197,7 @@ static void pg_st_split_statement (pTHX_ imp_sth_t * imp_sth, int version, char
}
/* Create sequential placeholders */
- if (3 != imp_sth->placeholder_type) {
+ if (PLACEHOLDER_COLON != imp_sth->placeholder_type) {
for (xint=1; xint <= imp_sth->numphs; xint++) {
New(0, newph, 1, ph_t); /* freed in dbd_st_destroy */
newph->nextph = NULL;
@@ -2430,7 +2430,7 @@ int dbd_bind_ph (SV * sth, imp_sth_t * imp_sth, SV * ph_name, SV * newvalue, IV
(void)mg_get(ph_name);
}
name = SvPV(ph_name, name_len);
- if (3==imp_sth->placeholder_type) {
+ if (PLACEHOLDER_COLON == imp_sth->placeholder_type) {
if (':' != *name) {
croak("Placeholders must begin with ':' when using the \":foo\" style");
}
@@ -2445,7 +2445,7 @@ int dbd_bind_ph (SV * sth, imp_sth_t * imp_sth, SV * ph_name, SV * newvalue, IV
/* Find the placeholder in question */
- if (3==imp_sth->placeholder_type) {
+ if (PLACEHOLDER_COLON == imp_sth->placeholder_type) {
for (x=0,currph=imp_sth->ph; NULL != currph; currph = currph->nextph) {
if (0==strcmp(currph->fooname, name)) {
x=1;
diff --git a/dbdimp.h b/dbdimp.h
index 7cc6e3c..09d8f7c 100644
--- a/dbdimp.h
+++ b/dbdimp.h
@@ -74,6 +74,15 @@ struct ph_st {
};
typedef struct ph_st ph_t;
+typedef enum
+ {
+ PLACEHOLDER_NONE,
+ PLACEHOLDER_QUESTIONMARK,
+ PLACEHOLDER_DOLLAR,
+ PLACEHOLDER_COLON
+ } PGPlaceholderType;
+#define PLACEHOLDER_TYPE_COUNT (PLACEHOLDER_COLON + 1)
+
/* Define sth implementor data structure */
struct imp_sth_st {
dbih_stc_t com; /* MUST be first element in structure */
@@ -81,7 +90,7 @@ struct imp_sth_st {
int server_prepare; /* inherited from dbh. 3 states: 0=no 1=yes 2=smart */
int switch_prepared; /* inherited from dbh */
int number_iterations; /* how many times has the statement been executed? Used by switch_prepared */
- int placeholder_type; /* which style is being used 1=? 2=$1 3=:foo */
+ PGPlaceholderType placeholder_type; /* which style is being used 1=? 2=$1 3=:foo */
int numsegs; /* how many segments this statement has */
int numphs; /* how many placeholders this statement has */
int numbound; /* how many placeholders were explicitly bound by the client, not us */
--
1.8.4