Index: DBI.xs
===================================================================
--- DBI.xs	(revision 166)
+++ DBI.xs	(working copy)
@@ -3337,6 +3337,11 @@
 	SQL_WCHAR                        = SQL_WCHAR
 	SQL_WLONGVARCHAR                 = SQL_WLONGVARCHAR
 	SQL_WVARCHAR                     = SQL_WVARCHAR
+	SQL_CURSOR_FORWARD_ONLY		 = SQL_CURSOR_FORWARD_ONLY
+	SQL_CURSOR_KEYSET_DRIVEN	 = SQL_CURSOR_KEYSET_DRIVEN
+	SQL_CURSOR_DYNAMIC		 = SQL_CURSOR_DYNAMIC
+	SQL_CURSOR_STATIC		 = SQL_CURSOR_STATIC
+	SQL_CURSOR_TYPE_DEFAULT		 = SQL_CURSOR_TYPE_DEFAULT
 	DBIpp_cm_cs	= DBIpp_cm_cs
 	DBIpp_cm_hs	= DBIpp_cm_hs
 	DBIpp_cm_dd	= DBIpp_cm_dd
Index: dbi_sql.h
===================================================================
--- dbi_sql.h	(revision 166)
+++ dbi_sql.h	(working copy)
@@ -76,6 +76,15 @@
 #define	SQL_SUCCESS_WITH_INFO		1
 #define	SQL_NO_DATA_FOUND		100
 
+/*
+ * for ODBC SQL Cursor Types
+ */
+#define SQL_CURSOR_FORWARD_ONLY         0UL
+#define SQL_CURSOR_KEYSET_DRIVEN        1UL
+#define SQL_CURSOR_DYNAMIC              2UL
+#define SQL_CURSOR_STATIC               3UL
+#define SQL_CURSOR_TYPE_DEFAULT         SQL_CURSOR_FORWARD_ONLY
+
 #endif	/*	SQL_SUCCESS	*/
 
 /* Handy macro for testing for success and success with info.		*/
Index: t/01basics.t
===================================================================
--- t/01basics.t	(revision 166)
+++ t/01basics.t	(working copy)
@@ -20,7 +20,7 @@
 }
 
 
-use DBI qw(:sql_types :utils);
+use DBI qw(:sql_types :utils :sql_cursor_types);
 
 warn "   Using DBI::PurePerl (DBI_PUREPERL=$DBI::PurePerl) on $Config{archname}\n"
     if $DBI::PurePerl;
@@ -86,6 +86,11 @@
 ok(0, neat(undef) eq "undef");
 ok(0, neat_list([1+1, "2", undef, "foobarbaz"], 8, "|") eq "2|'2'|undef|'foo...'");
 
+# spot check a few of the sql cursor types
+ok(0, SQL_CURSOR_FORWARD_ONLY == 0);
+ok(0, SQL_CURSOR_DYNAMIC == 2);
+
+
 my @is_num = looks_like_number(undef, "", "foo", 1, ".");
 ok(0, !defined $is_num[0]);	# undef -> undef
 ok(0, !defined $is_num[1]);	# "" -> undef (eg "don't know")
@@ -117,5 +122,5 @@
 ok(0, @installed_drivers >= 1);
 ok(0, grep { $_ eq 'Sponge' } @installed_drivers);
 
-BEGIN { $tests = 43 }
+BEGIN { $tests = 45 }
 exit 0;
Index: lib/DBI/PurePerl.pm
===================================================================
--- lib/DBI/PurePerl.pm	(revision 166)
+++ lib/DBI/PurePerl.pm	(working copy)
@@ -91,6 +91,13 @@
 use constant SQL_WLONGVARCHAR => (-10);
 use constant SQL_WVARCHAR => (-9);
 
+# for Cursor types
+use constant SQL_CURSOR_FORWARD_ONLY => 0;
+use constant SQL_CURSOR_KEYSET_DRIVEN => 1;
+use constant SQL_CURSOR_DYNAMIC => 2;
+use constant SQL_CURSOR_STATIC => 3;
+use constant SQL_CURSOR_TYPE_DEFAULT => 0;
+
 use constant IMA_HAS_USAGE	=> 0x0001; #/* check parameter usage	*/
 use constant IMA_FUNC_REDIRECT	=> 0x0002; #/* is $h->func(..., "method")*/
 use constant IMA_KEEP_ERR	=> 0x0004; #/* don't reset err & errstr	*/
Index: DBI.pm
===================================================================
--- DBI.pm	(revision 166)
+++ DBI.pm	(working copy)
@@ -222,6 +222,13 @@
 	SQL_INTERVAL_HOUR_TO_SECOND
 	SQL_INTERVAL_MINUTE_TO_SECOND
    ) ],
+   sql_cursor_types => [ qw(
+	 SQL_CURSOR_FORWARD_ONLY
+	 SQL_CURSOR_KEYSET_DRIVEN
+	 SQL_CURSOR_DYNAMIC
+	 SQL_CURSOR_STATIC
+	 SQL_CURSOR_TYPE_DEFAULT
+   ) ], # for ODBC cursor types
    utils     => [ qw(
 	neat neat_list dump_results looks_like_number
    ) ],
