├── .gitignore ├── README.md ├── beans ├── pom.xml └── src │ ├── main │ └── kotlin │ │ └── org │ │ └── kotlinprimavera │ │ └── beans │ │ ├── annotation │ │ └── namespace.kt │ │ ├── factory │ │ ├── annotation │ │ │ └── namespace.kt │ │ ├── namespace.kt │ │ └── support │ │ │ └── namespace.kt │ │ └── namespace.kt │ └── test │ └── kotlin │ └── org │ └── kotlinprimavera │ └── beans │ ├── BeanUtilsTest.kt │ └── factory │ └── BeanFactoryTest.kt ├── context ├── pom.xml └── src │ └── main │ └── kotlin │ └── org │ └── kotlinprimavera │ └── ui │ └── namespace.kt ├── core ├── pom.xml └── src │ ├── main │ └── kotlin │ │ └── org │ │ └── kotlinprimavera │ │ ├── core │ │ ├── env │ │ │ └── namespace.kt │ │ └── style │ │ │ ├── ToStringCreatorAppendTokens.kt │ │ │ └── namespace.kt │ │ └── util │ │ └── namespace.kt │ └── test │ └── kotlin │ └── org │ └── kotlinprimavera │ ├── core │ └── env │ │ └── PropertyResolverTests.kt │ └── util │ └── SysPropertyTest.kt ├── jdbc ├── pom.xml └── src │ ├── main │ └── kotlin │ │ └── org │ │ └── kotlinprimavera │ │ └── jdbc │ │ └── core │ │ ├── AbstractBlobArgumentSetter.kt │ │ ├── ArgumentSetter.kt │ │ ├── ArgumentSetter2.kt │ │ ├── ArgumentWithLengthSetter.kt │ │ ├── BlobArgumentSetter.kt │ │ ├── ClobArgumentSetter.kt │ │ ├── CombinedArgumentSetter.kt │ │ ├── DefaultArgumentSetter.kt │ │ ├── GetFieldsToken.kt │ │ ├── NClobArgumentSetter.kt │ │ ├── ObjectArgumentSetter.kt │ │ ├── PreparedStatementArgumentsSetter.kt │ │ ├── ResultSetGetFieldTokens.kt │ │ ├── config │ │ ├── EmbeddedDatabaseTag.kt │ │ ├── ExecutionValue.kt │ │ ├── ScriptTag.kt │ │ └── namespace.kt │ │ ├── namedparam │ │ └── namespace.kt │ │ └── namespace.kt │ └── test │ ├── kotlin │ └── org │ │ └── kotlinprimavera │ │ └── jdbc │ │ ├── TestBean.kt │ │ ├── config │ │ └── DataTestConfig.kt │ │ └── core │ │ ├── JdbcOperationsTest.kt │ │ ├── JdbcTestBase.kt │ │ ├── PerformanceTest.kt │ │ └── namedparam │ │ └── NamedParameterJdbcOperationsTest.kt │ └── resources │ ├── logback.xml │ ├── org │ └── kotlinprimavera │ │ └── jdbc │ │ ├── core │ │ ├── JdbcOperationsTest-context.xml │ │ ├── PerformanceTest-context.xml │ │ └── namedparam │ │ │ └── NamedParameterJdbcOperationsTest-context.xml │ │ └── kp-jdbc-test-base.xml │ ├── schema-hsql.sql │ ├── test-data.sql │ └── test-performance.sql ├── pom.xml ├── security ├── pom.xml └── src │ └── main │ └── kotlin │ └── org │ └── kotlinprimavera │ └── security │ └── config │ └── annnotation │ └── web │ └── builders │ └── namespace.kt ├── tx ├── pom.xml └── src │ └── test │ ├── kotlin │ └── org │ │ └── kotlinprimavera │ │ └── transaction │ │ └── support │ │ └── TransactionOperationsTest.kt │ └── resources │ ├── logback.xml │ ├── org │ └── kotlinprimavera │ │ └── transaction │ │ └── support │ │ └── TransactionOperationsTest-context.xml │ ├── schema-hsql.sql │ └── test-data.sql └── webmvc ├── pom.xml └── src └── main └── kotlin └── org └── kotlinprimavera └── web └── servlet └── namespace.kt /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* 2 | *.iml 3 | */target/* 4 | target/* 5 | *.kte -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Documentation 2 | 3 | Read the [Wiki](https://github.com/MarioAriasC/KotlinPrimavera/wiki) -------------------------------------------------------------------------------- /beans/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | 4.0.0 22 | 23 | org.kotlinprimavera 24 | parent 25 | 0.5 26 | 27 | beans 28 | KotlinPrimavera Beans Module 29 | jar 30 | 0.5 31 | 32 | src/main/kotlin 33 | src/test/kotlin 34 | 35 | 36 | kotlin-maven-plugin 37 | org.jetbrains.kotlin 38 | ${kotlin.version} 39 | 40 | 41 | compile 42 | compile 43 | 44 | compile 45 | 46 | 47 | 48 | 49 | test-compile 50 | test-compile 51 | 52 | test-compile 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /beans/src/main/kotlin/org/kotlinprimavera/beans/annotation/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.beans.annotation 18 | 19 | import org.springframework.beans.annotation.AnnotationBeanUtils 20 | import org.springframework.util.StringValueResolver 21 | 22 | /** 23 | * Created by IntelliJ IDEA. 24 | * @author Mario Arias 25 | * Date: 13/06/15 26 | * Time: 2:23 PM 27 | */ 28 | 29 | fun Annotation.copyPropertiesToBean(bean: Any, vararg excludedProperties: String) { 30 | return AnnotationBeanUtils.copyPropertiesToBean(this, bean, *excludedProperties) 31 | } 32 | 33 | 34 | fun Annotation.copyPropertiesToBean(bean: Any, valueResolver: StringValueResolver, vararg excludedProperties: String) { 35 | return AnnotationBeanUtils.copyPropertiesToBean(this, bean, valueResolver, *excludedProperties) 36 | } -------------------------------------------------------------------------------- /beans/src/main/kotlin/org/kotlinprimavera/beans/factory/annotation/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.beans.factory.annotation 18 | 19 | import org.springframework.beans.factory.BeanFactory 20 | import org.springframework.beans.factory.annotation.BeanFactoryAnnotationUtils 21 | 22 | /** 23 | * Created by IntelliJ IDEA. 24 | * @author Mario Arias 25 | * Date: 13/06/15 26 | * Time: 2:41 PM 27 | */ 28 | 29 | 30 | fun BeanFactory.qualifiedBeanOfType(beanType: Class, qualifier: String): T { 31 | return BeanFactoryAnnotationUtils.qualifiedBeanOfType(this, beanType, qualifier) 32 | } 33 | -------------------------------------------------------------------------------- /beans/src/main/kotlin/org/kotlinprimavera/beans/factory/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2014 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.beans.factory 18 | 19 | import org.springframework.beans.BeansException 20 | import org.springframework.beans.factory.BeanFactory 21 | import org.springframework.beans.factory.BeanFactoryUtils 22 | import org.springframework.beans.factory.ListableBeanFactory 23 | 24 | /** 25 | * Util function extension to add array like access to [org.springframework.beans.factory.BeanFactory] 26 | */ 27 | operator fun BeanFactory.get(name: String): Any { 28 | return getBean(name) 29 | } 30 | 31 | /** 32 | * Util function extension to add array like access to [org.springframework.beans.factory.BeanFactory] 33 | */ 34 | operator fun BeanFactory.get(requiredType: Class): T { 35 | return getBean(requiredType) 36 | } 37 | 38 | /** 39 | * Util function extension to add array like access to [org.springframework.beans.factory.BeanFactory] 40 | */ 41 | operator fun BeanFactory.get(name: String, requiredType: Class): T { 42 | return getBean(name, requiredType) 43 | } 44 | 45 | /** 46 | * Util function extension to add array like access to [org.springframework.beans.factory.BeanFactory] 47 | */ 48 | operator fun BeanFactory.get(name: String, vararg args: Any): Any { 49 | return getBean(name, *args) 50 | } 51 | 52 | fun String.isFactoryDereference(): Boolean { 53 | return BeanFactoryUtils.isFactoryDereference(this) 54 | } 55 | 56 | 57 | fun String.transformedBeanName(): String { 58 | return BeanFactoryUtils.transformedBeanName(this) 59 | } 60 | 61 | 62 | fun String.isGeneratedBeanName(): Boolean { 63 | return BeanFactoryUtils.isGeneratedBeanName(this) 64 | } 65 | 66 | 67 | fun String.originalBeanName(): String { 68 | return BeanFactoryUtils.originalBeanName(this) 69 | } 70 | 71 | 72 | fun ListableBeanFactory.countBeansIncludingAncestors(): Int { 73 | return BeanFactoryUtils.countBeansIncludingAncestors(this) 74 | } 75 | 76 | 77 | fun ListableBeanFactory.beanNamesIncludingAncestors(): Array { 78 | return BeanFactoryUtils.beanNamesIncludingAncestors(this) 79 | } 80 | 81 | 82 | fun ListableBeanFactory.beanNamesForTypeIncludingAncestors(type: Class<*>, includeNonSingletons: Boolean, allowEagerInt: Boolean): Array { 83 | return BeanFactoryUtils.beanNamesForTypeIncludingAncestors(this, type, includeNonSingletons, allowEagerInt) 84 | } 85 | 86 | 87 | fun ListableBeanFactory.beanNamesForTypeIncludingAncestors(type: Class<*>): Array { 88 | return BeanFactoryUtils.beanNamesForTypeIncludingAncestors(this, type) 89 | } 90 | 91 | 92 | @Throws(BeansException::class) fun ListableBeanFactory.beansOfTypeIncludingAncestors(type: Class, includeNonSingletons: Boolean, allowEagerInt: Boolean): Map { 93 | return BeanFactoryUtils.beansOfTypeIncludingAncestors(this, type, includeNonSingletons, allowEagerInt) 94 | } 95 | 96 | 97 | @Throws(BeansException::class) fun ListableBeanFactory.beansOfTypeIncludingAncestors(type: Class): Map { 98 | return BeanFactoryUtils.beansOfTypeIncludingAncestors(this, type) 99 | } 100 | 101 | 102 | @Throws(BeansException::class) fun ListableBeanFactory.beanOfTypeIncludingAncestors(type: Class, includeNonSingletons: Boolean, allowEagerInt: Boolean): T { 103 | return BeanFactoryUtils.beanOfTypeIncludingAncestors(this, type, includeNonSingletons, allowEagerInt) 104 | } 105 | 106 | 107 | @Throws(BeansException::class) fun ListableBeanFactory.beanOfTypeIncludingAncestors(type: Class): T { 108 | return BeanFactoryUtils.beanOfTypeIncludingAncestors(this, type) 109 | } 110 | 111 | 112 | @Throws(BeansException::class) fun ListableBeanFactory.beanOfType(type: Class, includeNonSingletons: Boolean, allowEagerInt: Boolean): T { 113 | return BeanFactoryUtils.beanOfType(this, type, includeNonSingletons, allowEagerInt) 114 | } 115 | 116 | 117 | @Throws(BeansException::class) fun ListableBeanFactory.beanOfType(type: Class): T { 118 | return BeanFactoryUtils.beanOfType(this, type) 119 | } 120 | -------------------------------------------------------------------------------- /beans/src/main/kotlin/org/kotlinprimavera/beans/factory/support/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.beans.factory.support 18 | 19 | import org.springframework.beans.factory.BeanDefinitionStoreException 20 | import org.springframework.beans.factory.config.BeanDefinition 21 | import org.springframework.beans.factory.config.BeanDefinitionHolder 22 | import org.springframework.beans.factory.support.AbstractBeanDefinition 23 | import org.springframework.beans.factory.support.BeanDefinitionReaderUtils 24 | import org.springframework.beans.factory.support.BeanDefinitionRegistry 25 | 26 | /** 27 | * Created by IntelliJ IDEA. 28 | * @author Mario Arias 29 | * Date: 13/06/15 30 | * Time: 2:29 PM 31 | */ 32 | 33 | @Throws(ClassNotFoundException::class) fun String.createBeanDefinition(className: String, classLoader: ClassLoader): AbstractBeanDefinition { 34 | return BeanDefinitionReaderUtils.createBeanDefinition(this, className, classLoader) 35 | } 36 | 37 | 38 | @Throws(BeanDefinitionStoreException::class) fun BeanDefinition.generateBeanName(registry: BeanDefinitionRegistry): String { 39 | return BeanDefinitionReaderUtils.generateBeanName(this, registry) 40 | } 41 | 42 | 43 | @Throws(BeanDefinitionStoreException::class) fun BeanDefinition.generateBeanName(registry: BeanDefinitionRegistry, isInnerBean: Boolean): String { 44 | return BeanDefinitionReaderUtils.generateBeanName(this, registry, isInnerBean) 45 | } 46 | 47 | 48 | @Throws(BeanDefinitionStoreException::class) fun BeanDefinitionHolder.registerBeanDefinition(registry: BeanDefinitionRegistry) { 49 | return BeanDefinitionReaderUtils.registerBeanDefinition(this, registry) 50 | } 51 | 52 | 53 | @Throws(BeanDefinitionStoreException::class) fun AbstractBeanDefinition.registerWithGeneratedName(registry: BeanDefinitionRegistry): String { 54 | return BeanDefinitionReaderUtils.registerWithGeneratedName(this, registry) 55 | } 56 | -------------------------------------------------------------------------------- /beans/src/main/kotlin/org/kotlinprimavera/beans/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.beans 18 | 19 | import org.springframework.beans.BeanInstantiationException 20 | import org.springframework.beans.BeanUtils 21 | import org.springframework.beans.BeansException 22 | import org.springframework.beans.PropertyAccessorUtils 23 | import org.springframework.core.MethodParameter 24 | import java.beans.PropertyDescriptor 25 | import java.beans.PropertyEditor 26 | import java.lang.reflect.Constructor 27 | import java.lang.reflect.Method 28 | 29 | /** 30 | * Created by IntelliJ IDEA. 31 | * @author Mario Arias 32 | * Date: 9/06/15 33 | * Time: 11:37 PM 34 | */ 35 | 36 | 37 | /** 38 | * For initialize a var with a Not nullable type, specially util for ```@Autowired``` vars 39 | */ 40 | fun uninitialized(): T = null as T 41 | 42 | @Throws(BeanInstantiationException::class) fun Class.instantiate(): T { 43 | return BeanUtils.instantiate(this) 44 | } 45 | 46 | 47 | @Throws(BeanInstantiationException::class) fun Class.instantiateClass(): T { 48 | return BeanUtils.instantiateClass(this) 49 | } 50 | 51 | 52 | @Throws(BeanInstantiationException::class) fun Constructor.instantiateClass(vararg args: Any): T { 53 | return BeanUtils.instantiateClass(this, *args) 54 | } 55 | 56 | 57 | @Throws(BeanInstantiationException::class) fun Class<*>.instantiateClass(assignableTo: Class): T { 58 | return BeanUtils.instantiateClass(this, assignableTo) 59 | } 60 | 61 | 62 | fun Class<*>.findMethod(methodName: String, vararg paramTypes: Class<*>): Method { 63 | return BeanUtils.findMethod(this, methodName, *paramTypes) 64 | } 65 | 66 | 67 | fun Class<*>.findDeclaredMethod(methodName: String, vararg paramTypes: Class<*>): Method { 68 | return BeanUtils.findDeclaredMethod(this, methodName, *paramTypes) 69 | } 70 | 71 | 72 | @Throws(IllegalArgumentException::class) fun Class<*>.findMethodWithMinimalParameters(methodName: String): Method { 73 | return BeanUtils.findMethodWithMinimalParameters(this, methodName) 74 | } 75 | 76 | 77 | @Throws(IllegalArgumentException::class) fun Array.findMethodWithMinimalParameters(methodName: String): Method { 78 | return BeanUtils.findMethodWithMinimalParameters(this, methodName) 79 | } 80 | 81 | 82 | @Throws(IllegalArgumentException::class) fun Class<*>.findDeclaredMethodWithMinimalParameters(methodName: String): Method { 83 | return BeanUtils.findDeclaredMethodWithMinimalParameters(this, methodName) 84 | } 85 | 86 | 87 | fun String.resolveSignature(clazz: Class<*>): Method { 88 | return BeanUtils.resolveSignature(this, clazz) 89 | } 90 | 91 | 92 | @Throws(BeansException::class) fun Class<*>.getPropertyDescriptors(): Array { 93 | return BeanUtils.getPropertyDescriptors(this) 94 | } 95 | 96 | 97 | @Throws(BeansException::class) fun Class<*>.getPropertyDescriptor(propertyName: String): PropertyDescriptor { 98 | return BeanUtils.getPropertyDescriptor(this, propertyName) 99 | } 100 | 101 | 102 | @Throws(BeansException::class) fun Method.findPropertyForMethod(): PropertyDescriptor { 103 | return BeanUtils.findPropertyForMethod(this) 104 | } 105 | 106 | 107 | @Throws(BeansException::class) fun Method.findPropertyForMethod(clazz: Class<*>): PropertyDescriptor { 108 | return BeanUtils.findPropertyForMethod(this, clazz) 109 | } 110 | 111 | 112 | fun Class<*>.findEditorByConvention(): PropertyEditor { 113 | return BeanUtils.findEditorByConvention(this) 114 | } 115 | 116 | 117 | fun String.findPropertyType(vararg beanClasses: Class<*>): Class<*> { 118 | return BeanUtils.findPropertyType(this, *beanClasses) 119 | } 120 | 121 | 122 | fun PropertyDescriptor.getWriteMethodParameter(): MethodParameter { 123 | return BeanUtils.getWriteMethodParameter(this) 124 | } 125 | 126 | 127 | fun Class<*>.isSimpleProperty(): Boolean { 128 | return BeanUtils.isSimpleProperty(this) 129 | } 130 | 131 | 132 | fun Class<*>.isSimpleValueType(): Boolean { 133 | return BeanUtils.isSimpleValueType(this) 134 | } 135 | 136 | 137 | @Throws(BeansException::class) fun Any.copyProperties(target: Any) { 138 | return BeanUtils.copyProperties(this, target) 139 | } 140 | 141 | @Throws(BeansException::class) fun Any.copyProperties(target: Any, vararg ignoredProperties: String) { 142 | return BeanUtils.copyProperties(this, target, *ignoredProperties) 143 | } 144 | 145 | 146 | @Throws(BeansException::class) fun Any.copyProperties(target: Any, ignoredProperties: Class<*>) { 147 | return BeanUtils.copyProperties(this, target, ignoredProperties) 148 | } 149 | 150 | fun String.getPropertyName(): String { 151 | return PropertyAccessorUtils.getPropertyName(this) 152 | } 153 | 154 | 155 | fun String.isNestedOrIndexedProperty(): Boolean { 156 | return PropertyAccessorUtils.isNestedOrIndexedProperty(this) 157 | } 158 | 159 | 160 | fun String.getFirstNestedPropertySeparatorIndex(): Int { 161 | return PropertyAccessorUtils.getFirstNestedPropertySeparatorIndex(this) 162 | } 163 | 164 | 165 | fun String.getLastNestedPropertySeparatorIndex(): Int { 166 | return PropertyAccessorUtils.getLastNestedPropertySeparatorIndex(this) 167 | } 168 | 169 | fun String.matchesProperty(propertyPath: String): Boolean { 170 | return PropertyAccessorUtils.matchesProperty(this, propertyPath) 171 | } 172 | 173 | 174 | fun String.canonicalPropertyName(): String { 175 | return PropertyAccessorUtils.canonicalPropertyName(this) 176 | } 177 | 178 | 179 | fun Array.canonicalPropertyNames(): Array { 180 | return PropertyAccessorUtils.canonicalPropertyNames(this) 181 | } -------------------------------------------------------------------------------- /beans/src/test/kotlin/org/kotlinprimavera/beans/BeanUtilsTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.beans 18 | 19 | import org.springframework.beans.BeanInstantiationException 20 | import org.testng.Assert.* 21 | import org.testng.annotations.Test 22 | 23 | /** 24 | * Created by IntelliJ IDEA. 25 | * @author Mario Arias 26 | * Date: 9/06/15 27 | * Time: 11:59 PM 28 | */ 29 | public class BeanUtilsTest { 30 | 31 | @Test fun testInstantiate() { 32 | //No Parameters 33 | assertTrue(NoParameters::class.java.instantiate() is NoParameters) 34 | 35 | //Default parameter 36 | val defaultParameter = DefaultParameter::class.java.instantiate() 37 | assertTrue(defaultParameter is DefaultParameter) 38 | assertEquals(defaultParameter.name, "foo") 39 | 40 | //With parameters, will fail 41 | try { 42 | WithParameter::class.java.instantiate() 43 | fail("WithParameter was wrongly instantiated") 44 | } catch(e: BeanInstantiationException) { 45 | assertTrue(e.message!!.startsWith("Failed to instantiate [org.kotlinprimavera.beans.WithParameter]")) 46 | } 47 | 48 | } 49 | 50 | @Test fun testInstantiateClass() { 51 | //No parameters 52 | assertTrue(NoParameters::class.java.instantiateClass() is NoParameters) 53 | 54 | //Default parameter 55 | val defaultParameter = DefaultParameter::class.java.instantiateClass() 56 | assertTrue(defaultParameter is DefaultParameter) 57 | assertEquals(defaultParameter.name, "foo") 58 | 59 | //With parameters, will fail 60 | try { 61 | WithParameter::class.java.instantiateClass() 62 | fail("WithParameter was wrongly instantiated") 63 | } catch(e: BeanInstantiationException) { 64 | assertTrue(e.message!!.startsWith("Failed to instantiate [org.kotlinprimavera.beans.WithParameter]")) 65 | } 66 | 67 | //Assignable type 68 | assertTrue(DefaultParameter::class.java.instantiateClass(TestType::class.java) is TestType) 69 | 70 | //Not assignable, will fail 71 | try { 72 | NoParameters::class.java.instantiateClass(TestType::class.java) 73 | fail("NoParameters was wrongly instantiated") 74 | } catch(e: IllegalArgumentException) { 75 | assertEquals(e.message, "class org.kotlinprimavera.beans.NoParameters is not assignable to interface org.kotlinprimavera.beans.TestType") 76 | } 77 | 78 | //Constructors 79 | assertTrue(NoParameters::class.java.getDeclaredConstructor().instantiateClass() is NoParameters) 80 | 81 | //With Parameters 82 | assertEquals(WithParameter::class.java.getDeclaredConstructor(String::class.java).instantiateClass("baz").name, "baz") 83 | assertEquals(DefaultParameter::class.java.getDeclaredConstructor(String::class.java).instantiateClass("baz").name, "baz") 84 | 85 | 86 | //Default Parameter 87 | assertEquals(DefaultParameter::class.java.getDeclaredConstructor().instantiateClass().name, "foo") 88 | 89 | try { 90 | WithParameter::class.java.getDeclaredConstructor().instantiateClass() 91 | fail("WithParameter was wrongly instantiated") 92 | } catch(e: NoSuchMethodException) { 93 | assertEquals(e.message, "org.kotlinprimavera.beans.WithParameter.()") 94 | } 95 | 96 | try { 97 | DefaultParameter::class.java.getDeclaredConstructor(String::class.java).instantiateClass() 98 | fail("DefaultParameter wrongly instantiated") 99 | } catch(e: BeanInstantiationException) { 100 | assertTrue(e.message!!.startsWith("Failed to instantiate [org.kotlinprimavera.beans.DefaultParameter]: Illegal arguments for constructor")) 101 | } 102 | 103 | 104 | } 105 | 106 | @Test fun testFindMethod() { 107 | val dp = DefaultParameter() 108 | //calling ```invoke``` method 109 | assertEquals(dp.javaClass.findMethod("component1")(dp), "foo") 110 | try { 111 | dp.javaClass.findMethod("component2")(dp) 112 | fail("Method component2 doesn't exist") 113 | } catch(e: IllegalStateException) { 114 | 115 | } 116 | } 117 | 118 | @Test fun testFindDeclaredMethod() { 119 | val dp = DefaultParameter() 120 | //calling ```invoke``` method 121 | assertEquals(dp.javaClass.findDeclaredMethod("component1")(dp), "foo") 122 | try { 123 | dp.javaClass.findDeclaredMethod("component2")(dp) 124 | fail("Method component2 doesn't exist") 125 | } catch(e: IllegalStateException) { 126 | 127 | } 128 | } 129 | 130 | } 131 | 132 | 133 | interface TestType 134 | class NoParameters 135 | data class DefaultParameter(val name: String = "foo") : TestType 136 | data class WithParameter(val name: String) -------------------------------------------------------------------------------- /beans/src/test/kotlin/org/kotlinprimavera/beans/factory/BeanFactoryTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2014 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.beans.factory 18 | 19 | import org.springframework.beans.BeansException 20 | import org.springframework.context.annotation.AnnotationConfigApplicationContext 21 | import org.springframework.context.annotation.Bean 22 | import org.springframework.context.annotation.Configuration 23 | import org.springframework.context.annotation.Scope 24 | import org.testng.Assert.* 25 | import org.testng.annotations.Test 26 | 27 | 28 | class BeanFactoryTest { 29 | 30 | private val context = AnnotationConfigApplicationContext(TestConfig::class.java) 31 | 32 | @Test 33 | fun testGetA() { 34 | val a = context["a"] 35 | assertTrue(a is A) 36 | } 37 | 38 | @Test 39 | fun testGetB() { 40 | try { 41 | context[B::class.java] 42 | } catch(e: BeansException) { 43 | fail() 44 | } 45 | } 46 | 47 | @Test 48 | fun testGetC() { 49 | val c1 = context["c1", C::class.java] 50 | assertEquals(c1.value, 1) 51 | } 52 | 53 | @Test 54 | fun testGetD() { 55 | val dAsAny = context["d", 42, "kotlin"] 56 | assertTrue(dAsAny is D) 57 | val (num, str) = dAsAny as D 58 | assertEquals(num, 42) 59 | assertEquals(str, "kotlin") 60 | 61 | } 62 | 63 | } 64 | 65 | class A { 66 | } 67 | 68 | class B { 69 | } 70 | 71 | class C(val value: Int) { 72 | } 73 | 74 | data class D(val num: Int, val str: String) { 75 | } 76 | 77 | 78 | @Configuration 79 | open class TestConfig { 80 | 81 | @Bean 82 | open fun a(): A { 83 | return A() 84 | } 85 | 86 | @Bean 87 | open fun b(): B { 88 | return B() 89 | } 90 | 91 | @Bean 92 | open fun c1(): C { 93 | return C(1) 94 | } 95 | 96 | @Bean 97 | open fun c2(): C { 98 | return C(2) 99 | } 100 | 101 | @Bean @Scope("prototype") 102 | open fun d(num: Int, str: String): D { 103 | return D(num, str) 104 | } 105 | } -------------------------------------------------------------------------------- /context/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | 4.0.0 22 | 23 | org.kotlinprimavera 24 | parent 25 | 0.5 26 | 27 | context 28 | KotlinPrimavera Context Module 29 | jar 30 | 0.5 31 | 32 | src/main/kotlin 33 | src/test/kotlin 34 | 35 | 36 | kotlin-maven-plugin 37 | org.jetbrains.kotlin 38 | ${kotlin.version} 39 | 40 | 41 | 42 | compile 43 | compile 44 | 45 | compile 46 | 47 | 48 | 49 | 50 | test-compile 51 | test-compile 52 | 53 | test-compile 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /context/src/main/kotlin/org/kotlinprimavera/ui/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.ui 18 | 19 | import org.springframework.ui.Model 20 | import org.springframework.ui.ModelMap 21 | 22 | /** 23 | * Created by IntelliJ IDEA. 24 | * @author Mario Arias 25 | * Date: 7/09/13 26 | * Time: 1:08 27 | */ 28 | 29 | operator fun Model.set(attributeName: String, attributeValue: Any?) { 30 | this.addAttribute(attributeName, attributeValue) 31 | } 32 | 33 | fun Model.addAllAttributes(vararg attributes: Pair): Model { 34 | this.addAllAttributes(mapOf(*attributes)) 35 | return this 36 | } 37 | 38 | fun Model.mergeAttributes(vararg attributes: Pair): Model { 39 | this.mergeAttributes(mapOf(*attributes)) 40 | return this 41 | } 42 | 43 | operator fun ModelMap.set(attributeName: String, attributeValue: Any?) { 44 | this.addAttribute(attributeName, attributeValue) 45 | } 46 | 47 | fun ModelMap.addAllAttributes(vararg attributes: Pair): ModelMap { 48 | this.addAllAttributes(mapOf(*attributes)) 49 | return this 50 | } 51 | 52 | fun ModelMap.mergeAttributes(vararg attributes: Pair): ModelMap { 53 | this.mergeAttributes(mapOf(*attributes)) 54 | return this 55 | } 56 | -------------------------------------------------------------------------------- /core/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | 4.0.0 22 | 23 | org.kotlinprimavera 24 | parent 25 | 0.5 26 | 27 | core 28 | KotlinPrimavera Core Module 29 | jar 30 | 0.5 31 | 32 | 33 | 34 | 35 | src/main/kotlin 36 | src/test/kotlin 37 | 38 | 39 | kotlin-maven-plugin 40 | org.jetbrains.kotlin 41 | ${kotlin.version} 42 | 43 | 44 | compile 45 | compile 46 | 47 | compile 48 | 49 | 50 | 51 | 52 | test-compile 53 | test-compile 54 | 55 | test-compile 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /core/src/main/kotlin/org/kotlinprimavera/core/env/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2014 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.core.env 18 | 19 | import org.springframework.core.env.PropertyResolver 20 | 21 | /** 22 | * Created by IntelliJ IDEA. 23 | * @author Mario Arias 24 | * Date: 22/07/14 25 | * Time: 0:21 26 | */ 27 | 28 | operator fun PropertyResolver.get(key: String): String? { 29 | return this.getProperty(key) 30 | } 31 | 32 | operator fun PropertyResolver.get(key: String, defaultValue: String): String { 33 | return this.getProperty(key, defaultValue) 34 | } 35 | 36 | operator @Suppress("BASE_WITH_NULLABLE_UPPER_BOUND") 37 | fun PropertyResolver.get(key: String, targetType: Class): T? { 38 | return this.getProperty(key, targetType) 39 | } 40 | 41 | operator fun PropertyResolver.get(key: String, targetType: Class, defaultValue: T): T { 42 | return this.getProperty(key, targetType, defaultValue) 43 | } 44 | 45 | -------------------------------------------------------------------------------- /core/src/main/kotlin/org/kotlinprimavera/core/style/ToStringCreatorAppendTokens.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.core.style 18 | 19 | import org.springframework.core.style.ToStringCreator 20 | 21 | /** 22 | * Created by IntelliJ IDEA. 23 | * @author Mario Arias 24 | * Date: 29/08/13 25 | * Time: 21:09 26 | */ 27 | class ToStringCreatorAppendTokens(private val toStringCreator: ToStringCreator) { 28 | 29 | operator fun set(fieldName: String, value: Byte?) { 30 | toStringCreator.append(fieldName, value) 31 | } 32 | 33 | operator fun set(fieldName: String, value: Short?) { 34 | toStringCreator.append(fieldName, value) 35 | } 36 | 37 | operator fun set(fieldName: String, value: Int?) { 38 | toStringCreator.append(fieldName, value) 39 | } 40 | 41 | operator fun set(fieldName: String, value: Long?) { 42 | toStringCreator.append(fieldName, value) 43 | } 44 | 45 | operator fun set(fieldName: String, value: Float?) { 46 | toStringCreator.append(fieldName, value) 47 | } 48 | 49 | operator fun set(fieldName: String, value: Double?) { 50 | toStringCreator.append(fieldName, value) 51 | } 52 | 53 | operator fun set(fieldName: String, value: Boolean?) { 54 | toStringCreator.append(fieldName, value) 55 | } 56 | 57 | operator fun set(fieldName: String, value: Any?) { 58 | toStringCreator.append(fieldName, value) 59 | } 60 | } -------------------------------------------------------------------------------- /core/src/main/kotlin/org/kotlinprimavera/core/style/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.core.style 18 | 19 | import org.springframework.core.style.ToStringCreator 20 | import org.springframework.core.style.ToStringStyler 21 | import org.springframework.core.style.ValueStyler 22 | 23 | /** 24 | * Created by IntelliJ IDEA. 25 | * @author Mario Arias 26 | * Date: 29/08/13 27 | * Time: 21:21 28 | */ 29 | 30 | val ToStringCreator.append: ToStringCreatorAppendTokens 31 | get() { 32 | return ToStringCreatorAppendTokens(this) 33 | } 34 | 35 | fun ToStringCreator(obj: Any, body: ToStringCreator.() -> Unit): ToStringCreator { 36 | val creator = ToStringCreator(obj) 37 | creator.body() 38 | return creator 39 | } 40 | 41 | fun ToStringCreator(obj: Any, styler: ValueStyler, body: ToStringCreator.() -> Unit): ToStringCreator { 42 | val creator = ToStringCreator(obj, styler) 43 | creator.body() 44 | return creator 45 | } 46 | 47 | fun ToStringCreator(obj: Any, styler: ToStringStyler, body: ToStringCreator.() -> Unit): ToStringCreator { 48 | val creator = ToStringCreator(obj, styler) 49 | creator.body() 50 | return creator 51 | } 52 | -------------------------------------------------------------------------------- /core/src/main/kotlin/org/kotlinprimavera/util/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.util 18 | 19 | import org.funktionale.utils.GetterSetterOperation 20 | import org.springframework.util.StopWatch 21 | 22 | fun stopWatch(id: String = "", body: StopWatch.() -> Unit): StopWatch { 23 | val watch = StopWatch(id) 24 | watch.body() 25 | return watch 26 | } 27 | 28 | /*fun StopWatch.invoke(body:StopWatch.() -> Unit): StopWatch { 29 | this.body() 30 | return this 31 | }*/ 32 | 33 | 34 | fun StopWatch.task(name: String = "", body: () -> T): T { 35 | start(name) 36 | val result = body() 37 | stop() 38 | return result 39 | } 40 | 41 | val sysProperty: GetterSetterOperation = GetterSetterOperation( 42 | { k -> System.getProperty(k) }, 43 | { k, v -> System.setProperty(k, v) }) 44 | -------------------------------------------------------------------------------- /core/src/test/kotlin/org/kotlinprimavera/core/env/PropertyResolverTests.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2014 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.core.env 18 | 19 | import org.springframework.core.env.MutablePropertySources 20 | import org.springframework.core.env.PropertiesPropertySource 21 | import org.springframework.core.env.PropertyResolver 22 | import org.springframework.core.env.PropertySourcesPropertyResolver 23 | import org.testng.Assert.assertEquals 24 | import org.testng.Assert.assertNull 25 | import org.testng.annotations.BeforeMethod 26 | import org.testng.annotations.Test 27 | import java.util.* 28 | import kotlin.properties.Delegates 29 | 30 | /** 31 | * Created by IntelliJ IDEA. 32 | * @author Mario Arias 33 | * Date: 22/07/14 34 | * Time: 0:57 35 | */ 36 | class PropertyResolverTests { 37 | private var testProperties: Properties by Delegates.notNull() 38 | private var propertySources: MutablePropertySources by Delegates.notNull() 39 | private var propertyResolver: PropertyResolver by Delegates.notNull() 40 | 41 | @BeforeMethod fun setUp() { 42 | propertySources = MutablePropertySources() 43 | propertyResolver = PropertySourcesPropertyResolver(propertySources) 44 | testProperties = Properties() 45 | propertySources.addFirst(PropertiesPropertySource("testProperties", testProperties)) 46 | } 47 | 48 | @Test fun getProperty() { 49 | assertNull(propertyResolver["foo"]) 50 | assertNull(propertyResolver["num"]) 51 | testProperties["foo"] = "bar" 52 | testProperties["num"] = 5 53 | assertEquals(propertyResolver["foo"], "bar") 54 | assertEquals(propertyResolver["num", Int::class.java], 5) 55 | } 56 | 57 | @Test fun getPropertyWithDefaultValue() { 58 | assertEquals(propertyResolver["foo", "myDefault"], "myDefault") 59 | assertEquals(propertyResolver["num", Int::class.java, 42], 42) 60 | testProperties["foo"] = "bar" 61 | testProperties["num"] = 5 62 | assertEquals(propertyResolver["foo", "myDefault"], "bar") 63 | assertEquals(propertyResolver["num", Int::class.java, 13], 5) 64 | } 65 | 66 | } -------------------------------------------------------------------------------- /core/src/test/kotlin/org/kotlinprimavera/util/SysPropertyTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.util 18 | 19 | import org.testng.Assert 20 | import org.testng.annotations.Test 21 | 22 | 23 | class SysPropertyTest { 24 | @Test fun setAndGetProperty() { 25 | sysProperty["org.kotlinprimavera.test"] = "kotlin" 26 | Assert.assertEquals(sysProperty["org.kotlinprimavera.test"] , "kotlin") 27 | } 28 | } -------------------------------------------------------------------------------- /jdbc/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | 4.0.0 22 | 23 | org.kotlinprimavera 24 | parent 25 | 0.5 26 | 27 | jdbc 28 | KotlinPrimavera JDBC Module 29 | jar 30 | 0.5 31 | 32 | 33 | org.springframework 34 | spring-jdbc 35 | compile 36 | 37 | 38 | org.kotlinprimavera 39 | beans 40 | 0.5 41 | 42 | 43 | org.kotlinprimavera 44 | core 45 | 0.5 46 | 47 | 48 | org.hsqldb 49 | hsqldb 50 | test 51 | 52 | 53 | 54 | src/main/kotlin 55 | src/test/kotlin 56 | 57 | 58 | kotlin-maven-plugin 59 | org.jetbrains.kotlin 60 | ${kotlin.version} 61 | 62 | 63 | compile 64 | compile 65 | 66 | compile 67 | 68 | 69 | 70 | 71 | test-compile 72 | test-compile 73 | 74 | test-compile 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/AbstractBlobArgumentSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2014 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 23/08/13 23 | * Time: 21:27 24 | */ 25 | 26 | abstract class AbstractBlobArgumentSetter(override val setter: (Int, R) -> Unit, 27 | override val setter2: (Int, R, Long) -> Unit) : ArgumentSetter, ArgumentSetter2 28 | 29 | -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/ArgumentSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 21/08/13 23 | * Time: 22:04 24 | */ 25 | interface ArgumentSetter { 26 | 27 | val setter: (Int, T) -> Unit 28 | 29 | operator fun set(index: Int, t: T) { 30 | setter(index, t) 31 | } 32 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/ArgumentSetter2.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 21/08/13 23 | * Time: 22:04 24 | */ 25 | interface ArgumentSetter2 { 26 | 27 | val setter2: (Int, T, A) -> Unit 28 | 29 | operator fun set(index: Int, a: A, t: T) { 30 | setter2(index, t, a) 31 | } 32 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/ArgumentWithLengthSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 21/08/13 23 | * Time: 22:04 24 | */ 25 | class ArgumentWithLengthSetter(override val setter: (Int, T) -> Unit, 26 | override val setter2: (Int, T, Int) -> Unit, 27 | val setterWithLong: (Int, T, Long) -> Unit) : ArgumentSetter, ArgumentSetter2 { 28 | 29 | operator fun set(i: Int, lenght: Long, t: T) { 30 | setterWithLong(i, t, lenght) 31 | } 32 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/BlobArgumentSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | import java.io.InputStream 20 | import java.sql.Blob 21 | 22 | /** 23 | * Created by IntelliJ IDEA. 24 | * @author Mario Arias 25 | * Date: 23/08/13 26 | * Time: 21:27 27 | */ 28 | 29 | class BlobArgumentSetter(val blobSetter: (Int, Blob) -> Unit, 30 | override val setter: (Int, InputStream) -> Unit, 31 | override val setter2: (Int, InputStream, Long) -> Unit) : AbstractBlobArgumentSetter(setter, setter2) { 32 | 33 | operator fun set(index: Int, blob: Blob) { 34 | blobSetter(index, blob) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/ClobArgumentSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2014 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | import java.io.Reader 20 | import java.sql.Clob 21 | 22 | /** 23 | * Created by IntelliJ IDEA. 24 | * @author Mario Arias 25 | * Date: 23/08/13 26 | * Time: 21:27 27 | */ 28 | 29 | class ClobArgumentSetter(val blobSetter: (Int, Clob) -> Unit, 30 | override val setter: (Int, Reader) -> Unit, 31 | override val setter2: (Int, Reader, Long) -> Unit) : AbstractBlobArgumentSetter(setter, setter2) { 32 | 33 | operator fun set(index: Int, clob: Clob) { 34 | blobSetter(index, clob) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/CombinedArgumentSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 23/08/13 23 | * Time: 22:07 24 | */ 25 | open class CombinedArgumentSetter(override val setter: (Int, T) -> Unit, 26 | override val setter2: (Int, T, A) -> Unit) : ArgumentSetter, ArgumentSetter2 -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/DefaultArgumentSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 23/08/13 23 | * Time: 21:01 24 | */ 25 | class DefaultArgumentSetter(override val setter: (Int, T) -> Unit) : ArgumentSetter -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/GetFieldsToken.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 20/08/13 23 | * Time: 22:59 24 | */ 25 | class GetFieldsToken(val withFieldName: (String) -> T, val withIndex: (Int) -> T) { 26 | 27 | operator fun get(columnIndex: Int): T { 28 | return withIndex(columnIndex) 29 | } 30 | 31 | operator fun get(columnLabel: String): T { 32 | return withFieldName(columnLabel) 33 | } 34 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/NClobArgumentSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2014 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | import java.io.Reader 20 | import java.sql.NClob 21 | 22 | /** 23 | * Created by IntelliJ IDEA. 24 | * @author Mario Arias 25 | * Date: 23/08/13 26 | * Time: 21:27 27 | */ 28 | 29 | class NClobArgumentSetter(val blobSetter: (Int, NClob) -> Unit, 30 | override val setter: (Int, Reader) -> Unit, 31 | override val setter2: (Int, Reader, Long) -> Unit) : AbstractBlobArgumentSetter(setter, setter2) { 32 | 33 | operator fun set(index: Int, clob: NClob) { 34 | blobSetter(index, clob) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/ObjectArgumentSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 24/08/13 23 | * Time: 21:16 24 | */ 25 | class ObjectArgumentSetter(setter: (Int, Any) -> Unit, 26 | setter2: (Int, Any, Int) -> Unit, 27 | val setter4: (Int, Any, Int, Int) -> Unit) : CombinedArgumentSetter(setter, setter2) { 28 | 29 | operator fun set(index: Int, targetSqlType: Int, scaleOrLenght: Int, x: Any) { 30 | setter4(index, x, targetSqlType, scaleOrLenght) 31 | } 32 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/PreparedStatementArgumentsSetter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | 20 | import java.io.InputStream 21 | import java.io.Reader 22 | import java.math.BigDecimal 23 | import java.net.URL 24 | import java.sql.* 25 | import java.sql.Date 26 | import java.util.* 27 | 28 | /** 29 | * Created by IntelliJ IDEA. 30 | * @author Mario Arias 31 | * Date: 21/08/13 32 | * Time: 22:02 33 | */ 34 | class PreparedStatementArgumentsSetter(prepareStatement: PreparedStatement) : PreparedStatement by prepareStatement { 35 | 36 | val array: DefaultArgumentSetter 37 | get() { 38 | return DefaultArgumentSetter { i, v -> setArray(i, v) } 39 | } 40 | 41 | val asciiStream: ArgumentWithLengthSetter 42 | get() { 43 | return ArgumentWithLengthSetter( 44 | { i, v -> setAsciiStream(i, v) }, 45 | { i, v, l -> setAsciiStream(i, v, l) }, 46 | { i, v, l -> setAsciiStream(i, v, l) }) 47 | } 48 | 49 | val bigDecimal: DefaultArgumentSetter 50 | get() { 51 | return DefaultArgumentSetter { i, v -> setBigDecimal(i, v) } 52 | } 53 | 54 | val binaryStream: ArgumentWithLengthSetter 55 | get() { 56 | return ArgumentWithLengthSetter( 57 | { i, v -> setBinaryStream(i, v) }, 58 | { i, v, l -> setBinaryStream(i, v, l) }, 59 | { i, v, l -> setBinaryStream(i, v, l) }) 60 | } 61 | 62 | val blob: BlobArgumentSetter 63 | get() { 64 | return BlobArgumentSetter( 65 | { i, v -> setBlob(i, v) }, 66 | { i, v -> setBlob(i, v) }, 67 | { i, v, l -> setBlob(i, v, l) }) 68 | } 69 | 70 | val boolean: DefaultArgumentSetter 71 | get() { 72 | return DefaultArgumentSetter { i, v -> setBoolean(i, v) } 73 | } 74 | 75 | val byte: DefaultArgumentSetter 76 | get() { 77 | return DefaultArgumentSetter { i, v -> setByte(i, v) } 78 | } 79 | 80 | val bytes: DefaultArgumentSetter 81 | get() { 82 | return DefaultArgumentSetter { i, v -> setBytes(i, v) } 83 | } 84 | 85 | val characterStream: ArgumentWithLengthSetter 86 | get() { 87 | return ArgumentWithLengthSetter( 88 | { i, v -> setCharacterStream(i, v) }, 89 | { i, v, l -> setCharacterStream(i, v, l) }, 90 | { i, v, l -> setCharacterStream(i, v, l) }) 91 | } 92 | 93 | val clob: ClobArgumentSetter 94 | get() { 95 | return ClobArgumentSetter( 96 | { i, b -> setClob(i, b) }, 97 | { i, v -> setClob(i, v) }, 98 | { i, v, l -> setClob(i, v, l) }) 99 | } 100 | 101 | val date: CombinedArgumentSetter 102 | get() { 103 | return CombinedArgumentSetter( 104 | { i, d -> setDate(i, d) }, 105 | { i, d, c -> setDate(i, d, c) }) 106 | } 107 | 108 | val double: DefaultArgumentSetter 109 | get() { 110 | return DefaultArgumentSetter { i, v -> setDouble(i, v) } 111 | } 112 | 113 | val float: DefaultArgumentSetter 114 | get() { 115 | return DefaultArgumentSetter { i, v -> setFloat(i, v) } 116 | } 117 | 118 | val int: DefaultArgumentSetter 119 | get() { 120 | return DefaultArgumentSetter { i, v -> setInt(i, v) } 121 | } 122 | 123 | val long: DefaultArgumentSetter 124 | get() { 125 | return DefaultArgumentSetter { i, v -> setLong(i, v) } 126 | } 127 | 128 | val nCharacterStream: CombinedArgumentSetter 129 | get() { 130 | return CombinedArgumentSetter( 131 | { i, r -> setNCharacterStream(i, r) }, 132 | { i, r, l -> setNCharacterStream(i, r, l) }) 133 | } 134 | 135 | val nClob: NClobArgumentSetter 136 | get() { 137 | return NClobArgumentSetter( 138 | { i, b -> setNClob(i, b) }, 139 | { i, v -> setNClob(i, v) }, 140 | { i, v, l -> setNClob(i, v, l) }) 141 | } 142 | 143 | val nString: DefaultArgumentSetter 144 | get() { 145 | return DefaultArgumentSetter { i, v -> setNString(i, v) } 146 | } 147 | 148 | val `null`: CombinedArgumentSetter 149 | get() { 150 | return CombinedArgumentSetter( 151 | { i, s -> setNull(i, s) }, 152 | { i, s, t -> setNull(i, s, t) }) 153 | } 154 | 155 | val `object`: ObjectArgumentSetter 156 | get() { 157 | return ObjectArgumentSetter( 158 | { i, x -> setObject(i, x) }, 159 | { i, x, t -> setObject(i, x, t) }, 160 | { i, x, t, s -> setObject(i, x, t, s) } 161 | 162 | ) 163 | } 164 | 165 | val ref: DefaultArgumentSetter 166 | get() { 167 | return DefaultArgumentSetter { i, v -> setRef(i, v) } 168 | } 169 | 170 | val rowId: DefaultArgumentSetter 171 | get() { 172 | return DefaultArgumentSetter { i, v -> setRowId(i, v) } 173 | } 174 | 175 | val sqlXml: DefaultArgumentSetter 176 | get() { 177 | return DefaultArgumentSetter { i, v -> setSQLXML(i, v) } 178 | } 179 | 180 | val string: DefaultArgumentSetter 181 | get() { 182 | return DefaultArgumentSetter { i, v -> setString(i, v) } 183 | } 184 | 185 | val time: CombinedArgumentSetter 186 | get() { 187 | return CombinedArgumentSetter( 188 | { i, d -> setTime(i, d) }, 189 | { i, d, c -> setTime(i, d, c) }) 190 | } 191 | 192 | val timestamp: CombinedArgumentSetter 193 | get() { 194 | return CombinedArgumentSetter( 195 | { i, d -> setTimestamp(i, d) }, 196 | { i, d, c -> setTimestamp(i, d, c) }) 197 | } 198 | 199 | val url: DefaultArgumentSetter 200 | get() { 201 | return DefaultArgumentSetter { i, v -> setURL(i, v) } 202 | } 203 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/ResultSetGetFieldTokens.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | import java.io.InputStream 20 | import java.io.Reader 21 | import java.math.BigDecimal 22 | import java.net.URL 23 | import java.sql.* 24 | 25 | /** 26 | * Created by IntelliJ IDEA. 27 | * @author Mario Arias 28 | * Date: 20/08/13 29 | * Time: 23:04 30 | */ 31 | class ResultSetGetFieldTokens(resultSet: ResultSet) : ResultSet by resultSet { 32 | val array: GetFieldsToken 33 | get() { 34 | return GetFieldsToken( 35 | { columnName -> getArray(columnName) }, 36 | { columnIndex -> getArray(columnIndex) }) 37 | } 38 | 39 | val asciiStream: GetFieldsToken 40 | get() { 41 | return GetFieldsToken( 42 | { columnName -> getAsciiStream(columnName) }, 43 | { columnIndex -> getAsciiStream(columnIndex) }) 44 | } 45 | 46 | val bigDecimal: GetFieldsToken 47 | get() { 48 | return GetFieldsToken( 49 | { columnName -> getBigDecimal(columnName) }, 50 | { columnIndex -> getBigDecimal(columnIndex) }) 51 | } 52 | 53 | val binaryStream: GetFieldsToken 54 | get() { 55 | return GetFieldsToken( 56 | { columnName -> getBinaryStream(columnName) }, 57 | { columnIndex -> getBinaryStream(columnIndex) }) 58 | } 59 | 60 | val blob: GetFieldsToken 61 | get() { 62 | return GetFieldsToken( 63 | { columnName -> getBlob(columnName) }, 64 | { columnIndex -> getBlob(columnIndex) }) 65 | } 66 | 67 | val boolean: GetFieldsToken 68 | get() { 69 | return GetFieldsToken( 70 | { columnName -> getBoolean(columnName) }, 71 | { columnIndex -> getBoolean(columnIndex) }) 72 | } 73 | 74 | 75 | val byte: GetFieldsToken 76 | get() { 77 | return GetFieldsToken( 78 | { columnName -> getByte(columnName) }, 79 | { columnIndex -> getByte(columnIndex) }) 80 | } 81 | 82 | 83 | val bytes: GetFieldsToken 84 | get() { 85 | return GetFieldsToken( 86 | { columnName -> getBytes(columnName) }, 87 | { columnIndex -> getBytes(columnIndex) }) 88 | } 89 | 90 | 91 | val characterStream: GetFieldsToken 92 | get() { 93 | return GetFieldsToken( 94 | { columnName -> getCharacterStream(columnName) }, 95 | { columnIndex -> getCharacterStream(columnIndex) }) 96 | } 97 | 98 | 99 | val clob: GetFieldsToken 100 | get() { 101 | return GetFieldsToken( 102 | { columnName -> getClob(columnName) }, 103 | { columnIndex -> getClob(columnIndex) }) 104 | } 105 | 106 | 107 | val date: GetFieldsToken 108 | get() { 109 | return GetFieldsToken( 110 | { columnName -> getDate(columnName) }, 111 | { columnIndex -> getDate(columnIndex) }) 112 | } 113 | 114 | 115 | val double: GetFieldsToken 116 | get() { 117 | return GetFieldsToken( 118 | { columnName -> getDouble(columnName) }, 119 | { columnIndex -> getDouble(columnIndex) }) 120 | } 121 | 122 | 123 | val float: GetFieldsToken 124 | get() { 125 | return GetFieldsToken( 126 | { columnName -> getFloat(columnName) }, 127 | { columnIndex -> getFloat(columnIndex) }) 128 | } 129 | 130 | 131 | val int: GetFieldsToken 132 | get() { 133 | return GetFieldsToken( 134 | { columnName -> getInt(columnName) }, 135 | { columnIndex -> getInt(columnIndex) }) 136 | } 137 | 138 | 139 | val long: GetFieldsToken 140 | get() { 141 | return GetFieldsToken( 142 | { columnName -> getLong(columnName) }, 143 | { columnIndex -> getLong(columnIndex) }) 144 | } 145 | 146 | 147 | val nCharacterStream: GetFieldsToken 148 | get() { 149 | return GetFieldsToken( 150 | { columnName -> getNCharacterStream(columnName) }, 151 | { columnIndex -> getNCharacterStream(columnIndex) }) 152 | } 153 | 154 | 155 | val nClob: GetFieldsToken 156 | get() { 157 | return GetFieldsToken( 158 | { columnName -> getNClob(columnName) }, 159 | { columnIndex -> getNClob(columnIndex) }) 160 | } 161 | 162 | 163 | val nString: GetFieldsToken 164 | get() { 165 | return GetFieldsToken( 166 | { columnName -> getNString(columnName) }, 167 | { columnIndex -> getNString(columnIndex) }) 168 | } 169 | 170 | 171 | val ref: GetFieldsToken 172 | get() { 173 | return GetFieldsToken( 174 | { columnName -> getRef(columnName) }, 175 | { columnIndex -> getRef(columnIndex) }) 176 | } 177 | 178 | 179 | val rowId: GetFieldsToken 180 | get() { 181 | return GetFieldsToken( 182 | { columnName -> getRowId(columnName) }, 183 | { columnIndex -> getRowId(columnIndex) }) 184 | } 185 | 186 | 187 | val short: GetFieldsToken 188 | get() { 189 | return GetFieldsToken( 190 | { columnName -> getShort(columnName) }, 191 | { columnIndex -> getShort(columnIndex) }) 192 | } 193 | 194 | 195 | val SQLXML: GetFieldsToken 196 | get() { 197 | return GetFieldsToken( 198 | { columnName -> getSQLXML(columnName) }, 199 | { columnIndex -> getSQLXML(columnIndex) }) 200 | } 201 | 202 | 203 | val string: GetFieldsToken 204 | get() { 205 | return GetFieldsToken( 206 | { columnName -> getString(columnName) }, 207 | { columnIndex -> getString(columnIndex) }) 208 | } 209 | 210 | 211 | val time: GetFieldsToken 212 | get() { 213 | return GetFieldsToken( 214 | { columnName -> getTime(columnName) }, 215 | { columnIndex -> getTime(columnIndex) }) 216 | } 217 | 218 | 219 | val timestamp: GetFieldsToken 220 | get() { 221 | return GetFieldsToken( 222 | { columnName -> getTimestamp(columnName) }, 223 | { columnIndex -> getTimestamp(columnIndex) }) 224 | } 225 | 226 | 227 | val URL: GetFieldsToken 228 | get() { 229 | return GetFieldsToken( 230 | { columnName -> getURL(columnName) }, 231 | { columnIndex -> getURL(columnIndex) }) 232 | } 233 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/config/EmbeddedDatabaseTag.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core.config 18 | 19 | import org.springframework.jdbc.datasource.init.ScriptUtils 20 | 21 | 22 | class EmbeddedDatabaseTag { 23 | val scripts: MutableList = arrayListOf() 24 | 25 | fun script(location: String, 26 | encoding: String? = null, 27 | separator: String = ScriptUtils.DEFAULT_STATEMENT_SEPARATOR, 28 | execution: ExecutionValue = ExecutionValue.INIT) { 29 | scripts.add(ScriptTag(location, encoding, separator, execution)) 30 | } 31 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/config/ExecutionValue.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core.config 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 25/01/15 23 | * Time: 1:16 AM 24 | */ 25 | enum class ExecutionValue(val value: String) { 26 | INIT("INIT"), 27 | DESTROY("DESTROY") 28 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/config/ScriptTag.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core.config 18 | 19 | /** 20 | * Created by IntelliJ IDEA. 21 | * @author Mario Arias 22 | * Date: 25/01/15 23 | * Time: 1:10 AM 24 | */ 25 | data class ScriptTag(val location: String, 26 | val encoding: String? = null, 27 | val separator: String, 28 | val execution: ExecutionValue = ExecutionValue.INIT) 29 | -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/config/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core.config 18 | 19 | import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory 20 | import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType 21 | import javax.sql.DataSource 22 | 23 | fun embeddedDatabase(type: EmbeddedDatabaseType, body: EmbeddedDatabaseTag.() -> Unit): DataSource { 24 | val tag = EmbeddedDatabaseTag() 25 | tag.body() 26 | val scripts = tag.scripts 27 | 28 | val factory = EmbeddedDatabaseFactory() 29 | with(factory) { 30 | setDatabaseType(type) 31 | 32 | } 33 | return factory.database 34 | } -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/namedparam/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core.namedparam 18 | 19 | import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource 20 | import org.springframework.jdbc.core.namedparam.MapSqlParameterSource 21 | 22 | /** 23 | * Created by IntelliJ IDEA. 24 | * @author Mario Arias 25 | * Date: 27/08/13 26 | * Time: 0:49 27 | */ 28 | 29 | fun Any.toSqlParameterSource(): BeanPropertySqlParameterSource { 30 | return BeanPropertySqlParameterSource(this) 31 | } 32 | 33 | fun Map.toSqlParameterSource(): MapSqlParameterSource { 34 | return MapSqlParameterSource(this) 35 | } 36 | 37 | operator fun MapSqlParameterSource.set(paramName: String, value: Any?) { 38 | this.addValue(paramName, value) 39 | } 40 | 41 | operator fun MapSqlParameterSource.set(paramName: String, sqlType: Int, value: Any?) { 42 | this.addValue(paramName, value, sqlType) 43 | } 44 | 45 | operator fun MapSqlParameterSource.set(paramName: String, sqlType: Int, typeName: String, value: Any?) { 46 | this.addValue(paramName, value, sqlType, typeName) 47 | } 48 | 49 | fun MapSqlParameterSource.addValues(vararg args: Pair): MapSqlParameterSource { 50 | return this.addValues(mapOf(*args))!! 51 | } 52 | 53 | operator fun MapSqlParameterSource.get(paramName: String): Any { 54 | return this.getValue(paramName)!! 55 | } 56 | -------------------------------------------------------------------------------- /jdbc/src/main/kotlin/org/kotlinprimavera/jdbc/core/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | import org.funktionale.option.Option 20 | import org.funktionale.option.Option.None 21 | import org.funktionale.option.Option.Some 22 | import org.springframework.dao.EmptyResultDataAccessException 23 | import org.springframework.jdbc.core.JdbcOperations 24 | import org.springframework.jdbc.core.ResultSetExtractor 25 | import org.springframework.jdbc.core.RowMapper 26 | import java.sql.PreparedStatement 27 | import java.sql.ResultSet 28 | 29 | /** 30 | * Created by IntelliJ IDEA. 31 | * @author Mario Arias 32 | * Date: 20/08/13 33 | * Time: 23:07 34 | */ 35 | 36 | @Suppress("BASE_WITH_NULLABLE_UPPER_BOUND") fun emptyResultToNull(body: () -> T): T? = try { 37 | body() 38 | } catch(e: EmptyResultDataAccessException) { 39 | null 40 | } 41 | 42 | fun emptyResultToOption(body: () -> T): Option = try { 43 | Some(body()) 44 | } catch(e: EmptyResultDataAccessException) { 45 | None 46 | } 47 | 48 | fun rowMapperObject(rowMapper: (ResultSet, Int) -> T): RowMapper = RowMapper { rs, rowNum -> rowMapper(rs, rowNum) } 49 | 50 | inline fun ResultSet.extract(body: ResultSetGetFieldTokens.() -> T): T { 51 | return ResultSetGetFieldTokens(this).body() 52 | } 53 | 54 | fun PreparedStatement.arguments(body: PreparedStatementArgumentsSetter.() -> Unit) { 55 | PreparedStatementArgumentsSetter(this).body() 56 | } 57 | 58 | fun JdbcOperations.query(sql: String, vararg args: Any, rse: (ResultSet) -> T): T { 59 | return this.query(sql, ResultSetExtractor { rs -> rse(rs) }, *args) 60 | } 61 | 62 | fun JdbcOperations.query(sql: String, rse: (ResultSet) -> Unit): Unit { 63 | return this.query(sql, { rs -> rse(rs) }) 64 | } 65 | 66 | fun JdbcOperations.query(sql: String, rse: (ResultSet) -> T): T { 67 | return this.query(sql, ResultSetExtractor { rs -> rse(rs) }) 68 | } 69 | 70 | fun JdbcOperations.query(sql: String, vararg args: Any, rowMapper: (ResultSet, Int) -> T): List { 71 | return this.query(sql, rowMapperObject(rowMapper), *args) 72 | } 73 | 74 | fun JdbcOperations.queryForObject(sql: String, vararg args: Any, rowMapper: (ResultSet, Int) -> T): T { 75 | return this.queryForObject(sql, rowMapperObject(rowMapper), *args) 76 | } 77 | 78 | 79 | -------------------------------------------------------------------------------- /jdbc/src/test/kotlin/org/kotlinprimavera/jdbc/TestBean.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc 18 | 19 | import java.util.* 20 | 21 | /** 22 | * Created by IntelliJ IDEA. 23 | * @author Mario Arias 24 | * Date: 20/08/13 25 | * Time: 23:22 26 | */ 27 | data class TestBean(var id: Int? = null, 28 | var description: String? = null, 29 | var createDate: Date? = null) -------------------------------------------------------------------------------- /jdbc/src/test/kotlin/org/kotlinprimavera/jdbc/config/DataTestConfig.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.config 18 | 19 | import org.kotlinprimavera.jdbc.core.config.embeddedDatabase 20 | import org.springframework.context.annotation.Bean 21 | import org.springframework.context.annotation.Configuration 22 | import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType 23 | import javax.sql.DataSource 24 | 25 | /** 26 | * Created by IntelliJ IDEA. 27 | * @author Mario Arias 28 | * Date: 25/01/15 29 | * Time: 1:26 AM 30 | */ 31 | @Configuration 32 | open class DataTestConfig { 33 | 34 | @Bean 35 | open fun dataSource(): DataSource { 36 | return embeddedDatabase(type = EmbeddedDatabaseType.HSQL) { 37 | script(location = "classpath:schema-hsql.sql") 38 | script(location = "classpath:test-data.sql") 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /jdbc/src/test/kotlin/org/kotlinprimavera/jdbc/core/JdbcOperationsTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | import org.kotlinprimavera.beans.uninitialized 20 | import org.springframework.beans.factory.annotation.Autowired 21 | import org.springframework.jdbc.core.JdbcTemplate 22 | import org.springframework.jdbc.support.GeneratedKeyHolder 23 | import org.springframework.test.context.ContextConfiguration 24 | import org.testng.Assert.assertEquals 25 | import org.testng.Assert.assertTrue 26 | import org.testng.annotations.Test 27 | import java.sql.* 28 | 29 | 30 | /** 31 | * Created by IntelliJ IDEA. 32 | * @author Mario Arias 33 | * Date: 20/08/13 34 | * Time: 23:27 35 | */ 36 | @ContextConfiguration class JdbcOperationsTest : JdbcTestBase() { 37 | 38 | private val select1: String = "$select where id = 1" 39 | private val selectIdPython = "$selectId where description = 'python'" 40 | private val selectGreaterThan = "$select where id > ?" 41 | private val selectById = "$select where id = ?" 42 | private val insert = "insert into test_bean(description) values(?)" 43 | 44 | 45 | private val statementCreator: (Connection) -> PreparedStatement = { con -> 46 | val st = con.prepareStatement(selectIdByDescription) 47 | st.arguments { 48 | string[1] = python 49 | } 50 | st 51 | } 52 | 53 | @Autowired var template: JdbcTemplate = uninitialized() 54 | 55 | @Test fun testExecute() { 56 | template.execute { connection: Connection -> 57 | val prepareStatement = connection.prepareStatement(selectIdByDescription) 58 | prepareStatement.arguments { 59 | string[1] = python 60 | } 61 | val resultSet = prepareStatement.executeQuery() 62 | resultSet.extract { 63 | assertTrue(next()) 64 | assertEquals(int["id"], 1) 65 | close() 66 | } 67 | } 68 | 69 | template.execute { statement: Statement -> 70 | val resultSet = statement.executeQuery(select1) 71 | resultSet.extract { 72 | assertTrue(next()) 73 | assertEquals(string[description], python) 74 | close() 75 | } 76 | 77 | } 78 | 79 | assertEquals(template.execute(statementCreator, action), 1) 80 | 81 | assertEquals(template.execute(selectIdPython, action), 1) 82 | } 83 | 84 | @Test fun testQuery() { 85 | assertEquals(template.query(select1, { rs: ResultSet -> 86 | rs.extract { 87 | next() 88 | string[description]!! 89 | } 90 | }), python) 91 | 92 | template.query(select1, { rs: ResultSet -> 93 | rs.extract { 94 | assertEquals(string[description], python) 95 | } 96 | }) 97 | 98 | assertEquals(template.query(select, mapperFunction).size, 5) 99 | 100 | assertEquals(template.query(statementCreator, rsFunction), 1) 101 | 102 | assertEquals(template.query(selectIdByDescription, { statement -> 103 | statement.arguments { 104 | string[1] = python 105 | } 106 | }, rsFunction), 1) 107 | 108 | assertEquals(template.query(selectIdByDescription, arrayOf(python), intArrayOf(Types.VARCHAR), rsFunction), 1) 109 | 110 | assertEquals(template.query(selectIdByDescription, arrayOf(python), rsFunction), 1) 111 | 112 | assertEquals(template.query(selectIdByDescription, python) { rs -> rsFunction(rs) }, 1) 113 | 114 | assertEquals(template.query({ con: Connection -> 115 | con.prepareStatement(select) 116 | }, mapperFunction).size, 5) 117 | 118 | assertEquals(template.query(selectGreaterThan, 119 | { stmt: PreparedStatement -> 120 | stmt.arguments { 121 | int[1] = 1 122 | } 123 | }, mapperFunction).size, 4) 124 | 125 | assertEquals(template.query(selectGreaterThan, arrayOf(1), intArrayOf(Types.INTEGER), mapperFunction).size, 4) 126 | 127 | assertEquals(template.query(selectGreaterThan, arrayOf(1), mapperFunction).size, 4) 128 | 129 | assertEquals(template.query(selectGreaterThan, 1) { rs, rowNum -> mapperFunction(rs, rowNum) }.size, 4) 130 | 131 | 132 | } 133 | 134 | @Test fun testQueryForObject() { 135 | assertEquals(template.queryForObject(select1, mapperFunction).description, python) 136 | 137 | assertEquals(template.queryForObject(selectById, arrayOf(1), intArrayOf(Types.INTEGER), mapperFunction).description, python) 138 | 139 | assertEquals(template.queryForObject(selectById, arrayOf(1), mapperFunction).description, python) 140 | 141 | assertEquals(template.queryForObject(selectById, 1) { rs, rowNum -> mapperFunction(rs, rowNum) }.description, python) 142 | 143 | } 144 | 145 | @Test fun testUpdate() { 146 | assertEquals(template.update { con: Connection -> 147 | val ps = con.prepareStatement("update test_bean set create_date = ?") 148 | ps.arguments { 149 | date[1] = Date(System.currentTimeMillis()) 150 | } 151 | ps 152 | }, 5) 153 | 154 | 155 | assertEquals(template.update({ con -> 156 | val ps = con.prepareStatement(insert) 157 | ps.arguments { 158 | string[1] = "Haxe" 159 | } 160 | ps 161 | }, GeneratedKeyHolder()), 1) 162 | 163 | assertEquals(template.update("update test_bean set create_date = ?") { ps -> 164 | ps.arguments { 165 | date[1] = Date(System.currentTimeMillis()) 166 | } 167 | 168 | }, 6) 169 | 170 | } 171 | 172 | @Test fun testBatchUpdate() { 173 | template.batchUpdate(insert, listOf("clojure", "haxe", "objective-c", "erlang"), 4) { ps, t -> 174 | ps.arguments { 175 | string[1] = t 176 | } 177 | } 178 | assertEquals(count(), 9) 179 | } 180 | } 181 | -------------------------------------------------------------------------------- /jdbc/src/test/kotlin/org/kotlinprimavera/jdbc/core/JdbcTestBase.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | import org.kotlinprimavera.jdbc.TestBean 20 | import org.springframework.dao.EmptyResultDataAccessException 21 | import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests 22 | import org.testng.Assert.fail 23 | import java.sql.PreparedStatement 24 | import java.sql.ResultSet 25 | 26 | /** 27 | * Created by IntelliJ IDEA. 28 | * @author Mario Arias 29 | * Date: 20/08/13 30 | * Time: 23:28 31 | */ 32 | abstract class JdbcTestBase : AbstractTransactionalTestNGSpringContextTests() { 33 | 34 | val select = "select * from test_bean " 35 | 36 | val selectId = "select id from test_bean " 37 | val selectIdByDescription = "$selectId where description = ?" 38 | val python = "python" 39 | val description = "description" 40 | 41 | val mapperFunction = { rs: ResultSet, i: Int -> 42 | rs.extract { 43 | TestBean(int["id"]!!, 44 | string["description"]!!, 45 | date["create_date"]!!) 46 | } 47 | } 48 | 49 | 50 | val action = { st: PreparedStatement -> 51 | val rs = st.executeQuery() 52 | rsFunction(rs) 53 | } 54 | 55 | val rsFunction = { rs: ResultSet -> 56 | rs.extract { 57 | next() 58 | int["id"] 59 | } 60 | } 61 | 62 | protected fun count(): Int { 63 | return countRowsInTable("test_bean") 64 | } 65 | 66 | protected fun validateEmptyResult(body: () -> Unit) { 67 | try { 68 | body() 69 | fail("Function $body don't throw a exception") 70 | } catch(e: EmptyResultDataAccessException) { 71 | //expected 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /jdbc/src/test/kotlin/org/kotlinprimavera/jdbc/core/PerformanceTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core 18 | 19 | import org.funktionale.partials.invoke 20 | import org.funktionale.partials.partially3 21 | import org.kotlinprimavera.beans.uninitialized 22 | import org.kotlinprimavera.jdbc.TestBean 23 | import org.kotlinprimavera.util.stopWatch 24 | import org.kotlinprimavera.util.task 25 | import org.springframework.beans.factory.annotation.Autowired 26 | import org.springframework.jdbc.core.JdbcTemplate 27 | import org.springframework.jdbc.core.RowMapper 28 | import org.springframework.test.context.ContextConfiguration 29 | import org.testng.Assert 30 | import org.testng.annotations.Test 31 | import java.sql.ResultSet 32 | 33 | 34 | @ContextConfiguration class PerformanceTest : JdbcTestBase() { 35 | 36 | @Autowired var template: JdbcTemplate = uninitialized() 37 | 38 | 39 | @Test 40 | fun performance() { 41 | val watch = stopWatch() { 42 | 43 | for (i in 1..10) { 44 | task("With DSL as parameter: $i run") { 45 | val result = template.query(select, mapperFunction) 46 | Assert.assertEquals(result.size, 1000) 47 | } 48 | 49 | task("With DSL in line: $i run ") { 50 | val result = template.query(select) { rs, i -> 51 | rs.extract { 52 | TestBean(int["id"]!!, 53 | string["description"]!!, 54 | date["create_date"]!!) 55 | } 56 | } 57 | Assert.assertEquals(result.size, 1000) 58 | } 59 | 60 | task("Without DSL: $i run") { 61 | val result = template.query(select) { rs, i -> 62 | TestBean(rs.getInt("id"), 63 | rs.getString("description")!!, 64 | rs.getDate("create_date")!!) 65 | 66 | } 67 | Assert.assertEquals(result.size, 1000) 68 | } 69 | 70 | task("Without SAM: $i run") { 71 | val result = template.query(select, object : RowMapper { 72 | override fun mapRow(rs: ResultSet, rowNum: Int): TestBean { 73 | return TestBean(rs.getInt("id"), 74 | rs.getString("description")!!, 75 | rs.getDate("create_date")!!) 76 | } 77 | }) 78 | Assert.assertEquals(result.size, 1000) 79 | } 80 | } 81 | 82 | 83 | } 84 | println("watch.prettyPrint() = ${watch.prettyPrint()}") 85 | } 86 | 87 | fun f() { 88 | 89 | val mapper: (ResultSet, Int, String) -> User = { rs, i, prefix -> 90 | rs.extract { //DSL from KotlinPrimavera 91 | User(string["${prefix}_name"]!!, int["${prefix}_age"]!!) 92 | } 93 | } 94 | 95 | val doctors = template.query("select * from doctors", mapper(p3 = "dr")) 96 | 97 | val nurses = template.query("select * from nurses", mapper.partially3("n")) 98 | 99 | val patients = template.query("select * from patients", mapper(p3 = "p")) 100 | } 101 | } 102 | 103 | 104 | data class User(val name: String, val age: Int) 105 | 106 | -------------------------------------------------------------------------------- /jdbc/src/test/kotlin/org/kotlinprimavera/jdbc/core/namedparam/NamedParameterJdbcOperationsTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.jdbc.core.namedparam 18 | 19 | import org.kotlinprimavera.beans.uninitialized 20 | import org.kotlinprimavera.jdbc.TestBean 21 | import org.kotlinprimavera.jdbc.core.JdbcTestBase 22 | import org.springframework.beans.factory.annotation.Autowired 23 | import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate 24 | import org.springframework.test.context.ContextConfiguration 25 | import org.testng.Assert.assertEquals 26 | import org.testng.annotations.Test 27 | 28 | /** 29 | * Created by IntelliJ IDEA. 30 | * @author Mario Arias 31 | * Date: 27/08/13 32 | * Time: 1:04 33 | */ 34 | @ContextConfiguration class NamedParameterJdbcOperationsTest : JdbcTestBase() { 35 | @Autowired var template: NamedParameterJdbcTemplate = uninitialized() 36 | 37 | private val id = "id" 38 | 39 | private val selectByIdGreatherThan = "$select where id > :id" 40 | 41 | private val descriptionToPythonMap = mapOf(description to python) 42 | 43 | private val selectIdByNamedDescription = "$selectId where description = :description" 44 | 45 | private val selectByNamedId = "$select where id = :id" 46 | 47 | private val parameterSource = TestBean(description = python).toSqlParameterSource() 48 | 49 | @Test fun testExecute() { 50 | 51 | 52 | assertEquals(template.execute(selectIdByNamedDescription, parameterSource, action), 1) 53 | 54 | assertEquals(template.execute(selectIdByNamedDescription, descriptionToPythonMap, action), 1) 55 | } 56 | 57 | @Test fun testQuery() { 58 | assertEquals(template.query(selectIdByNamedDescription, parameterSource, rsFunction), 1) 59 | 60 | 61 | assertEquals(template.query(selectIdByNamedDescription, descriptionToPythonMap, rsFunction), 1) 62 | 63 | assertEquals(template.query(selectByIdGreatherThan, TestBean(id = 1).toSqlParameterSource(), mapperFunction).size, 4) 64 | 65 | 66 | assertEquals(template.query(selectByIdGreatherThan, mapOf(id to 1), mapperFunction).size, 4) 67 | } 68 | 69 | @Test fun testQueryForObject() { 70 | assertEquals(template.queryForObject(selectByNamedId, TestBean(id = 1).toSqlParameterSource(), mapperFunction).description, python) 71 | 72 | validateEmptyResult { 73 | template.queryForObject(selectByNamedId, TestBean(id = -1).toSqlParameterSource(), mapperFunction) 74 | } 75 | } 76 | 77 | 78 | } -------------------------------------------------------------------------------- /jdbc/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | [KotlinPrimavera JDBC] %d{HH:mm:ss.SSS} [%thread] %level %logger{32} - %msg%n 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /jdbc/src/test/resources/org/kotlinprimavera/jdbc/core/JdbcOperationsTest-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /jdbc/src/test/resources/org/kotlinprimavera/jdbc/core/PerformanceTest-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /jdbc/src/test/resources/org/kotlinprimavera/jdbc/core/namedparam/NamedParameterJdbcOperationsTest-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /jdbc/src/test/resources/org/kotlinprimavera/jdbc/kp-jdbc-test-base.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /jdbc/src/test/resources/schema-hsql.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE test_bean 2 | IF EXISTS; 3 | CREATE TABLE test_bean ( 4 | id INT IDENTITY PRIMARY KEY, 5 | description VARCHAR(1024), 6 | create_date TIMESTAMP DEFAULT current_timestamp 7 | ); -------------------------------------------------------------------------------- /jdbc/src/test/resources/test-data.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO test_bean (id, description) VALUES (1, 'python'); 2 | INSERT INTO test_bean (description) VALUES ('ruby'); 3 | INSERT INTO test_bean (description) VALUES ('scala'); 4 | INSERT INTO test_bean (description) VALUES ('java'); 5 | INSERT INTO test_bean (description) VALUES ('kotlin'); -------------------------------------------------------------------------------- /jdbc/src/test/resources/test-performance.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO test_bean (id, description) VALUES (1, 'e2ybcd1aqVa2eMQDGZ2L'); 2 | INSERT INTO test_bean (id, description) VALUES (2, 'uxP4oXyCvNGNww3k2FOy'); 3 | INSERT INTO test_bean (id, description) VALUES (3, 'hIF98CcJvPQCQ1G3pvRs'); 4 | INSERT INTO test_bean (id, description) VALUES (4, 'DClz0DErdRlC5JZNVjJI'); 5 | INSERT INTO test_bean (id, description) VALUES (5, 'phNmftFA4vW8u7P57RxD'); 6 | INSERT INTO test_bean (id, description) VALUES (6, 'JRhTWmrnZunvZoNImg3w'); 7 | INSERT INTO test_bean (id, description) VALUES (7, '6U6IRQnhvm55gtwkF7Wn'); 8 | INSERT INTO test_bean (id, description) VALUES (8, 'WZ91ppdFfwXbv5dd0sB5'); 9 | INSERT INTO test_bean (id, description) VALUES (9, 'ppeG1uX9Dx5Zmr37bTlW'); 10 | INSERT INTO test_bean (id, description) VALUES (10, 'AjWaGK2BM4c15ogo81Qv'); 11 | INSERT INTO test_bean (id, description) VALUES (11, 'eSd1bA9w9omMJHrrnF0B'); 12 | INSERT INTO test_bean (id, description) VALUES (12, 'BdFa1HxBirzVmQpNgvn8'); 13 | INSERT INTO test_bean (id, description) VALUES (13, 'GwkH6fV8v3Flgr6h8q19'); 14 | INSERT INTO test_bean (id, description) VALUES (14, '16LGHLK1AfDcn9ueIfoN'); 15 | INSERT INTO test_bean (id, description) VALUES (15, 'QxT3fgI5KHAKrc6u8BS5'); 16 | INSERT INTO test_bean (id, description) VALUES (16, 'gWOkaLrKfBESrsfbxBPN'); 17 | INSERT INTO test_bean (id, description) VALUES (17, 'TDKg17WwxHXUfdwUuRTV'); 18 | INSERT INTO test_bean (id, description) VALUES (18, 'epKxa3ftlAC50G0qtAe8'); 19 | INSERT INTO test_bean (id, description) VALUES (19, 'SCetvxxvgET5PeeEGddX'); 20 | INSERT INTO test_bean (id, description) VALUES (20, 'SE7gKd2O1bS1jKyjGitM'); 21 | INSERT INTO test_bean (id, description) VALUES (21, 'brdzBRyuFRKkaP75Vzt1'); 22 | INSERT INTO test_bean (id, description) VALUES (22, 'FWPwfK4BHI3Z75aCbBYu'); 23 | INSERT INTO test_bean (id, description) VALUES (23, '1r9ptWJWEK9VdG5CUmlD'); 24 | INSERT INTO test_bean (id, description) VALUES (24, 'LYd8P1cSMnzN8DRYVGhe'); 25 | INSERT INTO test_bean (id, description) VALUES (25, 'oi28l3KWTCDd9YLu9pHW'); 26 | INSERT INTO test_bean (id, description) VALUES (26, 'phNNj2PTbhNxtylgbEHF'); 27 | INSERT INTO test_bean (id, description) VALUES (27, 'dLpxS76PrsMxGvJFa2sF'); 28 | INSERT INTO test_bean (id, description) VALUES (28, 'LwpPraeZduIAL3VIEut2'); 29 | INSERT INTO test_bean (id, description) VALUES (29, 'xlDWmSZxki28onm4WOlo'); 30 | INSERT INTO test_bean (id, description) VALUES (30, '93G3vcmVKtm0nsdoFnWT'); 31 | INSERT INTO test_bean (id, description) VALUES (31, 'HIUIbLBBpAsbN4VVvNRK'); 32 | INSERT INTO test_bean (id, description) VALUES (32, 'm6VqSAzYvbh4p2kVhUVY'); 33 | INSERT INTO test_bean (id, description) VALUES (33, 'zonmQ4NuLo4053nGUR2A'); 34 | INSERT INTO test_bean (id, description) VALUES (34, 'ZKuH9QzQrJ64LS3IYJxS'); 35 | INSERT INTO test_bean (id, description) VALUES (35, 'dcbZZDDhHmmeEYVICAtn'); 36 | INSERT INTO test_bean (id, description) VALUES (36, 'QJq1XRkFUkkQqC05DnCv'); 37 | INSERT INTO test_bean (id, description) VALUES (37, 'zLqh0oUbfJRmOmQZVcpN'); 38 | INSERT INTO test_bean (id, description) VALUES (38, 'YNOSrTRsPjijEYIWdsct'); 39 | INSERT INTO test_bean (id, description) VALUES (39, 'eg7n0u1KaDjj30AjXdyh'); 40 | INSERT INTO test_bean (id, description) VALUES (40, 'PbGQpDcoCw586lqZHtWe'); 41 | INSERT INTO test_bean (id, description) VALUES (41, 'HGrLb8Lh8lgXSngVJZxa'); 42 | INSERT INTO test_bean (id, description) VALUES (42, 'XzxmKCBuy3LYFKM1DCaE'); 43 | INSERT INTO test_bean (id, description) VALUES (43, 'hG8MYH0eSMTCdBQTQ93k'); 44 | INSERT INTO test_bean (id, description) VALUES (44, 'NUlSud6NDl9Z76PmJ8EQ'); 45 | INSERT INTO test_bean (id, description) VALUES (45, 'ySp02Y8HIjEbiYpgp7EB'); 46 | INSERT INTO test_bean (id, description) VALUES (46, 'hvOiQaMqTiqLRm3ZVItJ'); 47 | INSERT INTO test_bean (id, description) VALUES (47, 'JTfbmzu9FFyZ6kdp1ADP'); 48 | INSERT INTO test_bean (id, description) VALUES (48, 'gM0Z2eWnSfzMKlrMYlQZ'); 49 | INSERT INTO test_bean (id, description) VALUES (49, 'jkhw0CkVnCwU3wVdWWrm'); 50 | INSERT INTO test_bean (id, description) VALUES (50, 'G8G8o1Yxd57UWBojH1Eb'); 51 | INSERT INTO test_bean (id, description) VALUES (51, 'pqqFnSPhIp4WAa4bCOWe'); 52 | INSERT INTO test_bean (id, description) VALUES (52, '5p38jjNvGVeg5DKHC1Bb'); 53 | INSERT INTO test_bean (id, description) VALUES (53, '28KsbktLA8jRuaIBcHDD'); 54 | INSERT INTO test_bean (id, description) VALUES (54, 'Obwecgd8717uBsXaoOou'); 55 | INSERT INTO test_bean (id, description) VALUES (55, 'Fj5KqHWvX8DHyBbC2uha'); 56 | INSERT INTO test_bean (id, description) VALUES (56, 'n7CRBPlITN3j2cZf310o'); 57 | INSERT INTO test_bean (id, description) VALUES (57, 'LigfXoHTV3h9Y6A7aYRv'); 58 | INSERT INTO test_bean (id, description) VALUES (58, 'n1dWgJTzmgZw9xskvcgX'); 59 | INSERT INTO test_bean (id, description) VALUES (59, 'dccwK6utoJAsXZmCWqRc'); 60 | INSERT INTO test_bean (id, description) VALUES (60, 'wET2Qids9Fcd5mBLryu3'); 61 | INSERT INTO test_bean (id, description) VALUES (61, 'PoveHEaJzyC2dHVc2rZq'); 62 | INSERT INTO test_bean (id, description) VALUES (62, 's3r0K6qmk6SwRGnmEA05'); 63 | INSERT INTO test_bean (id, description) VALUES (63, 'Pmc8HNoZFEVdNZbmG8Iy'); 64 | INSERT INTO test_bean (id, description) VALUES (64, 'FwrQX7oFDXnl3OJs0PWw'); 65 | INSERT INTO test_bean (id, description) VALUES (65, 'K2n1hyvePfTVHZHtZbQH'); 66 | INSERT INTO test_bean (id, description) VALUES (66, 'q698XpOvWi08qU68SpPN'); 67 | INSERT INTO test_bean (id, description) VALUES (67, '22O7475oi5L7sKViUYXO'); 68 | INSERT INTO test_bean (id, description) VALUES (68, 'WxLP1RVwhd9r3Tw9XyIz'); 69 | INSERT INTO test_bean (id, description) VALUES (69, 'YAe3fN4aTTbGND0spRyV'); 70 | INSERT INTO test_bean (id, description) VALUES (70, '2l0QI6wdfGm40NMont1v'); 71 | INSERT INTO test_bean (id, description) VALUES (71, 'aZ43sWuqBEhv0q4QQro6'); 72 | INSERT INTO test_bean (id, description) VALUES (72, 'auy1KIVlGU9emBL0Ah8e'); 73 | INSERT INTO test_bean (id, description) VALUES (73, '8k9bVzGsqTEKcveqfyhG'); 74 | INSERT INTO test_bean (id, description) VALUES (74, 'msGaO5g7BJppFBOyShmw'); 75 | INSERT INTO test_bean (id, description) VALUES (75, 'Wjuvc46JEruFoMIILyDX'); 76 | INSERT INTO test_bean (id, description) VALUES (76, 'StUGrIimFocjuYRyWvEE'); 77 | INSERT INTO test_bean (id, description) VALUES (77, 'wPF4twqFhu7WOEb590QC'); 78 | INSERT INTO test_bean (id, description) VALUES (78, 'gSsJHnU3Ll93OACJcdml'); 79 | INSERT INTO test_bean (id, description) VALUES (79, 'wSmm81ECdCuutigYsoHq'); 80 | INSERT INTO test_bean (id, description) VALUES (80, 'Wkv6ZiTXuxTEVPCYwYgo'); 81 | INSERT INTO test_bean (id, description) VALUES (81, 'z7RAnKMKUZpx03QFrLW5'); 82 | INSERT INTO test_bean (id, description) VALUES (82, 'RTEc05nNUAUXiJt15wek'); 83 | INSERT INTO test_bean (id, description) VALUES (83, 'OQ39MetNWzIy1CeE3Xbe'); 84 | INSERT INTO test_bean (id, description) VALUES (84, 'Xy66y5aUpup3PfJjxebM'); 85 | INSERT INTO test_bean (id, description) VALUES (85, 'aF7u1H9wDkgVf6G8pOr9'); 86 | INSERT INTO test_bean (id, description) VALUES (86, 'NJB6uzFqbIYjiM6mFxdS'); 87 | INSERT INTO test_bean (id, description) VALUES (87, 'jO02xFadiJN7q9wInVGT'); 88 | INSERT INTO test_bean (id, description) VALUES (88, 'EksltTV9DyOzlv8PXuMW'); 89 | INSERT INTO test_bean (id, description) VALUES (89, 'wIB1oyahGsGzrQS7TKzH'); 90 | INSERT INTO test_bean (id, description) VALUES (90, 'FkpO4g58pGFx08N6m8og'); 91 | INSERT INTO test_bean (id, description) VALUES (91, 'jurdTEH42slo0VVQYP8X'); 92 | INSERT INTO test_bean (id, description) VALUES (92, 'ekBLwaZgnZyISde7GPX7'); 93 | INSERT INTO test_bean (id, description) VALUES (93, 'FWrd7t6pcV8drWaFhteJ'); 94 | INSERT INTO test_bean (id, description) VALUES (94, '72kOUiE5Jl9GYiJ473Qj'); 95 | INSERT INTO test_bean (id, description) VALUES (95, 'YqXYZ4kbnkLLTSvV8nGr'); 96 | INSERT INTO test_bean (id, description) VALUES (96, 'PKGvBkPxWO6J5StjEUFi'); 97 | INSERT INTO test_bean (id, description) VALUES (97, 'IthDJmeeqS3VA1yiLWra'); 98 | INSERT INTO test_bean (id, description) VALUES (98, 'e3liRkdacqOSMTHfZVp1'); 99 | INSERT INTO test_bean (id, description) VALUES (99, 'B5oZ7lON5R5XefoKdVae'); 100 | INSERT INTO test_bean (id, description) VALUES (100, 'ivhVyflV5rs7Rj1zcndr'); 101 | INSERT INTO test_bean (id, description) VALUES (101, 'KavPIY3HwOLHyJdtkfas'); 102 | INSERT INTO test_bean (id, description) VALUES (102, 'aLPZoZ0F2RU6RcuprLYG'); 103 | INSERT INTO test_bean (id, description) VALUES (103, 'KbK95Tu3U9tOHx9ZXcME'); 104 | INSERT INTO test_bean (id, description) VALUES (104, 'ZPmZPYklJ1GMpcatvdxi'); 105 | INSERT INTO test_bean (id, description) VALUES (105, 'ZmGFhCD1sJATvOuucN0n'); 106 | INSERT INTO test_bean (id, description) VALUES (106, '3Vtsh8U1cLITVWSgE4bu'); 107 | INSERT INTO test_bean (id, description) VALUES (107, 'vOIfsRiM4tAGvooGbK75'); 108 | INSERT INTO test_bean (id, description) VALUES (108, 'nFd7ICPlAWzyjvcv1ws5'); 109 | INSERT INTO test_bean (id, description) VALUES (109, 'PlgPLaZ8q4T9XIuKK6FZ'); 110 | INSERT INTO test_bean (id, description) VALUES (110, 'B49HePrFqaObyPgufRIi'); 111 | INSERT INTO test_bean (id, description) VALUES (111, 'f6tWIqOcZkMDtimGdNEF'); 112 | INSERT INTO test_bean (id, description) VALUES (112, '0XDdXG3Eq3Xgks4pI1yB'); 113 | INSERT INTO test_bean (id, description) VALUES (113, 'cjSXiP4J7t2gflvLM0Ww'); 114 | INSERT INTO test_bean (id, description) VALUES (114, '0rs0t9lLGYttYaZrNCGc'); 115 | INSERT INTO test_bean (id, description) VALUES (115, '34e4XLnuUGr2qKuspj9B'); 116 | INSERT INTO test_bean (id, description) VALUES (116, 'OtZHgacMsjXTcVrtCmC6'); 117 | INSERT INTO test_bean (id, description) VALUES (117, '755Uh7CnKN6hoBvsMqZo'); 118 | INSERT INTO test_bean (id, description) VALUES (118, 'xsMsBfA6EK35Ea3NhB6I'); 119 | INSERT INTO test_bean (id, description) VALUES (119, 'YNUdmjLZysWcLpP5Q5aH'); 120 | INSERT INTO test_bean (id, description) VALUES (120, 'lxpNtcdWOJyRq1HIIRj7'); 121 | INSERT INTO test_bean (id, description) VALUES (121, 'Gof0L0wIgqQ7JldKNtmS'); 122 | INSERT INTO test_bean (id, description) VALUES (122, 'BmWtVlshysD2L0dKt1YW'); 123 | INSERT INTO test_bean (id, description) VALUES (123, 'Wcp8ghgxJs2LY3u1UpBh'); 124 | INSERT INTO test_bean (id, description) VALUES (124, 'uAy4NFTeL5gnhYNHJn1M'); 125 | INSERT INTO test_bean (id, description) VALUES (125, 'EDLm7cejnpscFcYebtAN'); 126 | INSERT INTO test_bean (id, description) VALUES (126, 'fOuMTjZne2j5OCPxOSgj'); 127 | INSERT INTO test_bean (id, description) VALUES (127, 'qo7bgjytvOLhZfioUua2'); 128 | INSERT INTO test_bean (id, description) VALUES (128, 'mFKzEN3YbyjuLv3H3FkR'); 129 | INSERT INTO test_bean (id, description) VALUES (129, 'owNFOEDtRFulxCG9ctIB'); 130 | INSERT INTO test_bean (id, description) VALUES (130, 'hA0QQH2cF3xCylRCVtcN'); 131 | INSERT INTO test_bean (id, description) VALUES (131, 'sBVIwG7FPuskrLdWwAF0'); 132 | INSERT INTO test_bean (id, description) VALUES (132, '3XD9nq0ITpLReO5jlq8C'); 133 | INSERT INTO test_bean (id, description) VALUES (133, 'A1t3jAx4Fe2Spb3la4HW'); 134 | INSERT INTO test_bean (id, description) VALUES (134, 'jVgLUlbBxRSWAH9zWr0r'); 135 | INSERT INTO test_bean (id, description) VALUES (135, 'RkHWNBaeTEydb3KD9pQP'); 136 | INSERT INTO test_bean (id, description) VALUES (136, 'L8VLSn6SVg75aAYEQmPO'); 137 | INSERT INTO test_bean (id, description) VALUES (137, 'MdNvEOzeqTr86ekP2ITs'); 138 | INSERT INTO test_bean (id, description) VALUES (138, 'r653Mr9fjQhixo2ZHKV0'); 139 | INSERT INTO test_bean (id, description) VALUES (139, 'CEXRWUwAHYtifHs3mTCJ'); 140 | INSERT INTO test_bean (id, description) VALUES (140, 'Pt2ZJLoK9vlL38dMDuBj'); 141 | INSERT INTO test_bean (id, description) VALUES (141, 'rZYvbFMdoY1cpSY1p9y1'); 142 | INSERT INTO test_bean (id, description) VALUES (142, 'thOsvk9RI9KA6eN7gIS0'); 143 | INSERT INTO test_bean (id, description) VALUES (143, 'NFEmKKg7HA6XJQtw0cCl'); 144 | INSERT INTO test_bean (id, description) VALUES (144, 'VHZl2ZcwrtIiCwbrbUGN'); 145 | INSERT INTO test_bean (id, description) VALUES (145, 'ZWSRR0u02ONGkwFAOM86'); 146 | INSERT INTO test_bean (id, description) VALUES (146, 'z2UZpxWMIlbBUgZ5NA2i'); 147 | INSERT INTO test_bean (id, description) VALUES (147, 'hmaEQquygXVP4Og3PoKd'); 148 | INSERT INTO test_bean (id, description) VALUES (148, '6xQiaQZs6A0rme7gMjxp'); 149 | INSERT INTO test_bean (id, description) VALUES (149, 'ODUCF0VDdIvKnIpbKE6O'); 150 | INSERT INTO test_bean (id, description) VALUES (150, '8WP9jFZdSSdboMv1Pl0g'); 151 | INSERT INTO test_bean (id, description) VALUES (151, '4qrINq6zk6WjuH9wBs6C'); 152 | INSERT INTO test_bean (id, description) VALUES (152, 'T2UqQefm9VfGAZgSILL0'); 153 | INSERT INTO test_bean (id, description) VALUES (153, 'wv8E3V2TDVjOTAP3LlZn'); 154 | INSERT INTO test_bean (id, description) VALUES (154, 'DNyPpRKSy3de0qowVR2N'); 155 | INSERT INTO test_bean (id, description) VALUES (155, 'bOjfAH7QXmqgtr4FqPrO'); 156 | INSERT INTO test_bean (id, description) VALUES (156, 'BAANHDt2Ls8Ilo6ukXIQ'); 157 | INSERT INTO test_bean (id, description) VALUES (157, 'K13aSmU2eOtzbeHCssxp'); 158 | INSERT INTO test_bean (id, description) VALUES (158, 'inpoX1YCeekKdvZLdnMl'); 159 | INSERT INTO test_bean (id, description) VALUES (159, 'keEr5DuqhZ5RMWfho7mq'); 160 | INSERT INTO test_bean (id, description) VALUES (160, 'ThApIPN3gqEbKEavuiYx'); 161 | INSERT INTO test_bean (id, description) VALUES (161, 'iCFeXRrBrkhHmBbUIFuj'); 162 | INSERT INTO test_bean (id, description) VALUES (162, 'aEChtBimQ2zFzTYshqr6'); 163 | INSERT INTO test_bean (id, description) VALUES (163, 'bPiIjKyTgBSlVGmv2QwN'); 164 | INSERT INTO test_bean (id, description) VALUES (164, 'iKQ1x3HhcYJKPn1y7Czg'); 165 | INSERT INTO test_bean (id, description) VALUES (165, 'FdnR1n2iWaAFIMjRA7W6'); 166 | INSERT INTO test_bean (id, description) VALUES (166, 'aHlPAWo8gtMv5HhQyucX'); 167 | INSERT INTO test_bean (id, description) VALUES (167, 'f4nk44jWeV5F4Oded2kG'); 168 | INSERT INTO test_bean (id, description) VALUES (168, 'IptQJBrDJYtcHWrbvY2g'); 169 | INSERT INTO test_bean (id, description) VALUES (169, '5k7OhsabsaQH3HL3lEhX'); 170 | INSERT INTO test_bean (id, description) VALUES (170, 'g1ni2UFMYJXYWF1h74ZK'); 171 | INSERT INTO test_bean (id, description) VALUES (171, 'oh2zAcDmQqXa69kZBzO8'); 172 | INSERT INTO test_bean (id, description) VALUES (172, 'I5PYSyrbDBwRjTfPYu3u'); 173 | INSERT INTO test_bean (id, description) VALUES (173, '7Gi45IopbP4XjPv9bwan'); 174 | INSERT INTO test_bean (id, description) VALUES (174, 'ULMzQ6Kgn2NLneeLszxp'); 175 | INSERT INTO test_bean (id, description) VALUES (175, 'mrlf5IsIRc5LQYYyWsPm'); 176 | INSERT INTO test_bean (id, description) VALUES (176, '1nSe6VK0NcYFjB81C9Uk'); 177 | INSERT INTO test_bean (id, description) VALUES (177, 'WBTXfaVmum7x2rv7uzI1'); 178 | INSERT INTO test_bean (id, description) VALUES (178, 'dI4uqPP46QvGDnSVkpw8'); 179 | INSERT INTO test_bean (id, description) VALUES (179, 'vtnDcQUc8vRa2eBWO1VR'); 180 | INSERT INTO test_bean (id, description) VALUES (180, 'sNnQhYB0IbDsRJY4ZeD5'); 181 | INSERT INTO test_bean (id, description) VALUES (181, '9OVwJo8tRgAek7lDTXe9'); 182 | INSERT INTO test_bean (id, description) VALUES (182, 'o7HqPYTmi3q14gfa1rY7'); 183 | INSERT INTO test_bean (id, description) VALUES (183, 'K63blFYfo79dlQsO1yy6'); 184 | INSERT INTO test_bean (id, description) VALUES (184, 'uEpS4EIg5UmUpXFf6I8I'); 185 | INSERT INTO test_bean (id, description) VALUES (185, 'X4juXRzIcxPKc49gIM2z'); 186 | INSERT INTO test_bean (id, description) VALUES (186, '450QOKCu22ZW7zVhkJDJ'); 187 | INSERT INTO test_bean (id, description) VALUES (187, 'TgcE9Bous0SNJJoo6SJQ'); 188 | INSERT INTO test_bean (id, description) VALUES (188, '0ED2cF9N0JaVUk9YxhiR'); 189 | INSERT INTO test_bean (id, description) VALUES (189, '5YOiAwYmzhZppFswhzr6'); 190 | INSERT INTO test_bean (id, description) VALUES (190, 'i6JOF4JhvYglBZbKGzVz'); 191 | INSERT INTO test_bean (id, description) VALUES (191, 'QUzI8ZfJCzQM0sVn1SRJ'); 192 | INSERT INTO test_bean (id, description) VALUES (192, '4iWKHQmGqrF0aH7zi97J'); 193 | INSERT INTO test_bean (id, description) VALUES (193, 'W1hQkUUD8famtmATV0zT'); 194 | INSERT INTO test_bean (id, description) VALUES (194, 'i46bIfsAKHbzmNHp2Ih3'); 195 | INSERT INTO test_bean (id, description) VALUES (195, 'Rujns9cje3vEOHwby5TT'); 196 | INSERT INTO test_bean (id, description) VALUES (196, '1TZ3CulIcxIXJWrB08f9'); 197 | INSERT INTO test_bean (id, description) VALUES (197, 'd9AMi9AURlCCbxg9artV'); 198 | INSERT INTO test_bean (id, description) VALUES (198, '3zNlVcqmoKn2GOtW0HGE'); 199 | INSERT INTO test_bean (id, description) VALUES (199, 'wB9IbCX27CaKjMeJaskk'); 200 | INSERT INTO test_bean (id, description) VALUES (200, '9NMpmX7LKsc2AaDXzNF5'); 201 | INSERT INTO test_bean (id, description) VALUES (201, 'mWhqx1m7XxbAmYHemnkm'); 202 | INSERT INTO test_bean (id, description) VALUES (202, 'gnmbuQCGKHhlqqRuxlst'); 203 | INSERT INTO test_bean (id, description) VALUES (203, 'AD8roKRlVu8jxZX0cbt0'); 204 | INSERT INTO test_bean (id, description) VALUES (204, 'sAhrczwv19UQw26b3iax'); 205 | INSERT INTO test_bean (id, description) VALUES (205, 'jlbF2r5mZCQkVbsaftWZ'); 206 | INSERT INTO test_bean (id, description) VALUES (206, '7s6q7Sbj42kD5AsN24n5'); 207 | INSERT INTO test_bean (id, description) VALUES (207, 'UORr3wzGxsgPTtDeyNHk'); 208 | INSERT INTO test_bean (id, description) VALUES (208, 'AjZ3mEisoLCPvmtMQmyd'); 209 | INSERT INTO test_bean (id, description) VALUES (209, 'qx4eQJqp5A7dukIkxtTZ'); 210 | INSERT INTO test_bean (id, description) VALUES (210, 'mf04EhLBkIizrNO8yfIE'); 211 | INSERT INTO test_bean (id, description) VALUES (211, 'm1gqasqGByZ4654t9kNZ'); 212 | INSERT INTO test_bean (id, description) VALUES (212, '4GNUwi7Np52uX9jNYj78'); 213 | INSERT INTO test_bean (id, description) VALUES (213, 'wVl5XUUaZ4eBqCo2zVA0'); 214 | INSERT INTO test_bean (id, description) VALUES (214, 'skdFiw9D8QAwFcCvv9Oa'); 215 | INSERT INTO test_bean (id, description) VALUES (215, 'PbJBOkZXEVCFaKgDaIja'); 216 | INSERT INTO test_bean (id, description) VALUES (216, 'MLFHE35Bl2ESQBInyEcg'); 217 | INSERT INTO test_bean (id, description) VALUES (217, 'Q0QbVkVB3bHrnmwcI6xH'); 218 | INSERT INTO test_bean (id, description) VALUES (218, 'G2rLUzgQTvjW68bt4I6y'); 219 | INSERT INTO test_bean (id, description) VALUES (219, 'EscqGpLdranFpBLq9U95'); 220 | INSERT INTO test_bean (id, description) VALUES (220, 'JFKwrl0IQ3mop1WssdjL'); 221 | INSERT INTO test_bean (id, description) VALUES (221, 'joILlK8PEGvefCT0Yt1P'); 222 | INSERT INTO test_bean (id, description) VALUES (222, 'OgT7eJlToTW6W7XshMZO'); 223 | INSERT INTO test_bean (id, description) VALUES (223, 'G0TR0sWMRHlrI7G1sb6U'); 224 | INSERT INTO test_bean (id, description) VALUES (224, 'lm5Lv5GPYnqjhAofbb75'); 225 | INSERT INTO test_bean (id, description) VALUES (225, 'ki6XRvTb0xfYlI5ToVlh'); 226 | INSERT INTO test_bean (id, description) VALUES (226, 'M5gf89nDk3ZoxrLZ6mi5'); 227 | INSERT INTO test_bean (id, description) VALUES (227, 'h1I1pBTpp4BGjoSgCAN2'); 228 | INSERT INTO test_bean (id, description) VALUES (228, 'DNeIKda8fBToYAh9KCHV'); 229 | INSERT INTO test_bean (id, description) VALUES (229, 'EAoTsXqdhkY2K9CPmrgB'); 230 | INSERT INTO test_bean (id, description) VALUES (230, 'gM4gGH4rHfF1iCg4PsyC'); 231 | INSERT INTO test_bean (id, description) VALUES (231, 'rLpBkndUMPVZIiccftIF'); 232 | INSERT INTO test_bean (id, description) VALUES (232, 'TMLbKcibYceYc4uarzwg'); 233 | INSERT INTO test_bean (id, description) VALUES (233, 'W1K8PeLTYe48wrcZhaal'); 234 | INSERT INTO test_bean (id, description) VALUES (234, 'rKJbhNB0PYGxWX2DOI7y'); 235 | INSERT INTO test_bean (id, description) VALUES (235, 'GZhpibMOU7WcBNyU2YDl'); 236 | INSERT INTO test_bean (id, description) VALUES (236, 'x4xt4qFNUPjUDxX2nqOx'); 237 | INSERT INTO test_bean (id, description) VALUES (237, 'H7AACQZL0XNqtsAVkugN'); 238 | INSERT INTO test_bean (id, description) VALUES (238, '5t69Idi59Uh2cBnleud2'); 239 | INSERT INTO test_bean (id, description) VALUES (239, 'gYVT3T7dw4kpoHkrCkGo'); 240 | INSERT INTO test_bean (id, description) VALUES (240, 'I9EpID5pSHtjx690a1d9'); 241 | INSERT INTO test_bean (id, description) VALUES (241, 'CAxsWbPg7qcVbegLJ2Ck'); 242 | INSERT INTO test_bean (id, description) VALUES (242, 'Rkf670GUuEBKBO0OQk8S'); 243 | INSERT INTO test_bean (id, description) VALUES (243, 'bKQ29jAp1Qanq7OsJLrS'); 244 | INSERT INTO test_bean (id, description) VALUES (244, 'CbTjx6gXl01A2azFr6kn'); 245 | INSERT INTO test_bean (id, description) VALUES (245, 'GsLcBu1w6txkfln9EWLo'); 246 | INSERT INTO test_bean (id, description) VALUES (246, 'h9r3P8UXOMvoUNGDekXt'); 247 | INSERT INTO test_bean (id, description) VALUES (247, 'ESzplzxxmp8kqSHJoxXf'); 248 | INSERT INTO test_bean (id, description) VALUES (248, 'wn1aieLG6wWYVV9gRLUN'); 249 | INSERT INTO test_bean (id, description) VALUES (249, 'svVwZFLSKIWMYXAYOv8g'); 250 | INSERT INTO test_bean (id, description) VALUES (250, 'tO9mf2PaUu7dL92zlEjA'); 251 | INSERT INTO test_bean (id, description) VALUES (251, 'Bf9OgioO55Vk0N4oHb3y'); 252 | INSERT INTO test_bean (id, description) VALUES (252, '5Lf45nrWgmi5uuPNaXOW'); 253 | INSERT INTO test_bean (id, description) VALUES (253, 'SQVEE2dSyX8igwRd30rV'); 254 | INSERT INTO test_bean (id, description) VALUES (254, 'htkJ76l4c0IfFn1Xe50k'); 255 | INSERT INTO test_bean (id, description) VALUES (255, 'vCRRbIabOVSvsvRMWov4'); 256 | INSERT INTO test_bean (id, description) VALUES (256, 'EogR8rWYDffSyLYcLDpK'); 257 | INSERT INTO test_bean (id, description) VALUES (257, 'PiZPg8Ve6DI9iQ1FKjSa'); 258 | INSERT INTO test_bean (id, description) VALUES (258, 'MF9NMMD280q6vHZfWMX5'); 259 | INSERT INTO test_bean (id, description) VALUES (259, 'K6efeNe7qQlBq4mqz7hN'); 260 | INSERT INTO test_bean (id, description) VALUES (260, 'WQlnu4KVXwYYVwFv0ydC'); 261 | INSERT INTO test_bean (id, description) VALUES (261, 'cqeiOA8I8HVCvlHzWXJZ'); 262 | INSERT INTO test_bean (id, description) VALUES (262, 'NADPd0oenOWjDwjQX4q4'); 263 | INSERT INTO test_bean (id, description) VALUES (263, 'Ou5nS36Lsm12aRbhAHEd'); 264 | INSERT INTO test_bean (id, description) VALUES (264, 'KA7uLAac4rjYFGSRPNSx'); 265 | INSERT INTO test_bean (id, description) VALUES (265, 'Mp5GRPKWYriryBPfbPOf'); 266 | INSERT INTO test_bean (id, description) VALUES (266, 'Tzy9j7fP9g92ERUqroC1'); 267 | INSERT INTO test_bean (id, description) VALUES (267, 'n9zW2h40i81fQXCgANoS'); 268 | INSERT INTO test_bean (id, description) VALUES (268, 'h2h4KKiA4h6SIqO5ThsT'); 269 | INSERT INTO test_bean (id, description) VALUES (269, 'fvgqMnFBZWVEN5wIo6CZ'); 270 | INSERT INTO test_bean (id, description) VALUES (270, 'qWPgxUILDjjYpqibn5Wn'); 271 | INSERT INTO test_bean (id, description) VALUES (271, 'WGQMtwNUGM22iq5TvCDY'); 272 | INSERT INTO test_bean (id, description) VALUES (272, 'f4vBa8RP0fduN2nL0rkY'); 273 | INSERT INTO test_bean (id, description) VALUES (273, 'CdMMyynDvhFHSFZweQig'); 274 | INSERT INTO test_bean (id, description) VALUES (274, '5lxoiP47UjlGyGEW6NAr'); 275 | INSERT INTO test_bean (id, description) VALUES (275, '9EtUwnMQWAeqGIRvVgNM'); 276 | INSERT INTO test_bean (id, description) VALUES (276, 'Uf1n7whXGawbpthZmxDR'); 277 | INSERT INTO test_bean (id, description) VALUES (277, '0XR00qLLDOkKy15cxo0C'); 278 | INSERT INTO test_bean (id, description) VALUES (278, 'CJuzQeVabtBTBl43XPVw'); 279 | INSERT INTO test_bean (id, description) VALUES (279, 'KxlmjCgQL9KfnXZW7xsq'); 280 | INSERT INTO test_bean (id, description) VALUES (280, 'rFuGyUUrCe7WAgbJXNwe'); 281 | INSERT INTO test_bean (id, description) VALUES (281, 'zvKA0flROVDcqBkCPGno'); 282 | INSERT INTO test_bean (id, description) VALUES (282, '1ssAyEH2hkn0rEyBbu8U'); 283 | INSERT INTO test_bean (id, description) VALUES (283, 'UrXZClmxnni6gepjK1rM'); 284 | INSERT INTO test_bean (id, description) VALUES (284, 'uuqDrut4hovfGSLxI62W'); 285 | INSERT INTO test_bean (id, description) VALUES (285, 'kmt8xWvPBHhoLbcwiAUE'); 286 | INSERT INTO test_bean (id, description) VALUES (286, '0Ong8mt1d1mvmsM1MK9W'); 287 | INSERT INTO test_bean (id, description) VALUES (287, '29G0fHETceG1y3Zq1Mba'); 288 | INSERT INTO test_bean (id, description) VALUES (288, 'fCxp1TFpvzEaLUIh9f32'); 289 | INSERT INTO test_bean (id, description) VALUES (289, '3n0jznvUONscQetiznl0'); 290 | INSERT INTO test_bean (id, description) VALUES (290, 'Mb3XZHo5cSDByrjqKdWs'); 291 | INSERT INTO test_bean (id, description) VALUES (291, 'b5tMHzVJZFylbzq88G8Z'); 292 | INSERT INTO test_bean (id, description) VALUES (292, 'NJVjDa9mK6me51ByF397'); 293 | INSERT INTO test_bean (id, description) VALUES (293, '6bcIsvZ7vWQfNojRCYKf'); 294 | INSERT INTO test_bean (id, description) VALUES (294, 'ezhlPPyaqbyaWe2m8bqm'); 295 | INSERT INTO test_bean (id, description) VALUES (295, 'idrUzUdJrU3LqMBNZcU9'); 296 | INSERT INTO test_bean (id, description) VALUES (296, 'jDDZ1QTtmf45HFmNNPor'); 297 | INSERT INTO test_bean (id, description) VALUES (297, '7DHZpXaICV9iGVPEjQB9'); 298 | INSERT INTO test_bean (id, description) VALUES (298, 'PRS79MRgGIf5UOWiZyYz'); 299 | INSERT INTO test_bean (id, description) VALUES (299, 'f4aKLUEgrYoT1Jpy7taK'); 300 | INSERT INTO test_bean (id, description) VALUES (300, 'O9aBDbJF4swNyY3X8i6g'); 301 | INSERT INTO test_bean (id, description) VALUES (301, 'VgBgpyEzFPcmY2Ur1gLe'); 302 | INSERT INTO test_bean (id, description) VALUES (302, '9uiaGNDWCI6YMz0NtVOT'); 303 | INSERT INTO test_bean (id, description) VALUES (303, 'dcIgu4ODWfhPHcUyovJc'); 304 | INSERT INTO test_bean (id, description) VALUES (304, 'cN2cn8zq5ZCTj0vHe3iR'); 305 | INSERT INTO test_bean (id, description) VALUES (305, '5uu94EkZOYCSbLhN1xNZ'); 306 | INSERT INTO test_bean (id, description) VALUES (306, 'Vsu7mNzunRze87dWzLHE'); 307 | INSERT INTO test_bean (id, description) VALUES (307, 'XT82psMVL4fSqwVzGOf6'); 308 | INSERT INTO test_bean (id, description) VALUES (308, 'ZSRTJO9RYiiomFcErsah'); 309 | INSERT INTO test_bean (id, description) VALUES (309, 'g6tPzNYmH7DUWJQk4Vzg'); 310 | INSERT INTO test_bean (id, description) VALUES (310, 'C51lnHbeZpFVlcxWl50y'); 311 | INSERT INTO test_bean (id, description) VALUES (311, 'BgByRzT9PYPcRFEGFEFl'); 312 | INSERT INTO test_bean (id, description) VALUES (312, 'erWbFMFW2F9x2pgRO0UG'); 313 | INSERT INTO test_bean (id, description) VALUES (313, 'IDL0CNtPLfL3OUBfBprI'); 314 | INSERT INTO test_bean (id, description) VALUES (314, 'yjTnV3pfFRzFTRuDe6na'); 315 | INSERT INTO test_bean (id, description) VALUES (315, '9V4ILZT6T2CtBNLCAg0C'); 316 | INSERT INTO test_bean (id, description) VALUES (316, 'jOMnSh6UZB63QYJR0lYw'); 317 | INSERT INTO test_bean (id, description) VALUES (317, 'BXOGghdLByKmKsfQLy2E'); 318 | INSERT INTO test_bean (id, description) VALUES (318, 'RtVAsi1Bi4MSs43hHuC4'); 319 | INSERT INTO test_bean (id, description) VALUES (319, '0yZ86Dzcp1M9BGmJduAt'); 320 | INSERT INTO test_bean (id, description) VALUES (320, 'tIK9OjWi5Ls5CqB7T0D7'); 321 | INSERT INTO test_bean (id, description) VALUES (321, 'L2srW9v8cwd8Q3YVzrb0'); 322 | INSERT INTO test_bean (id, description) VALUES (322, 'WH4TtnBgaEJLKw3Vglay'); 323 | INSERT INTO test_bean (id, description) VALUES (323, 'q6orJOZsJ9Q1b1TPso05'); 324 | INSERT INTO test_bean (id, description) VALUES (324, 'YWTqYK4YrygkDx4mVmaj'); 325 | INSERT INTO test_bean (id, description) VALUES (325, 'xzCRFnLdN5Tg3gBygMay'); 326 | INSERT INTO test_bean (id, description) VALUES (326, 'nf7lWbB67Ok2xT9S9oDx'); 327 | INSERT INTO test_bean (id, description) VALUES (327, 'eFgz3aKIRTvmaIRUI8av'); 328 | INSERT INTO test_bean (id, description) VALUES (328, 'xHSr6Ri2JvLS0uolDtZS'); 329 | INSERT INTO test_bean (id, description) VALUES (329, '0jF1DQeHnu9ZLHxdaIon'); 330 | INSERT INTO test_bean (id, description) VALUES (330, 'EhApzu9SGZhLrL5KOrVT'); 331 | INSERT INTO test_bean (id, description) VALUES (331, 'r4PNZouU5MU33pkamQxS'); 332 | INSERT INTO test_bean (id, description) VALUES (332, 'kBRrzyS91ntVn4b5qYm4'); 333 | INSERT INTO test_bean (id, description) VALUES (333, 'YcURY2GzLuMnX4ytGbhb'); 334 | INSERT INTO test_bean (id, description) VALUES (334, 'Dlv0sRh3PLTBGMIH4zyy'); 335 | INSERT INTO test_bean (id, description) VALUES (335, 'HL2fcfeciis0EYW9jELZ'); 336 | INSERT INTO test_bean (id, description) VALUES (336, 'qQg0ZmfVoUBHEUMqF1QM'); 337 | INSERT INTO test_bean (id, description) VALUES (337, 'VpUOrcYVd7UsomblT8vd'); 338 | INSERT INTO test_bean (id, description) VALUES (338, 'c8KK7JgnnGMUxip7ouxO'); 339 | INSERT INTO test_bean (id, description) VALUES (339, 'tOYaXGYlQEN31VGM4Pyx'); 340 | INSERT INTO test_bean (id, description) VALUES (340, 'zs2vuFZbEgz4l4veEK3e'); 341 | INSERT INTO test_bean (id, description) VALUES (341, 'Kbqhq227wftT62HDCbuB'); 342 | INSERT INTO test_bean (id, description) VALUES (342, 'O72koLawbDkyLQaNCcNG'); 343 | INSERT INTO test_bean (id, description) VALUES (343, 'A4ZKj1vIZoY7IuTEElv0'); 344 | INSERT INTO test_bean (id, description) VALUES (344, 'K2epFhbd6Yg0aN2gXCht'); 345 | INSERT INTO test_bean (id, description) VALUES (345, 'W4WLiqL76sCJI0IoY05i'); 346 | INSERT INTO test_bean (id, description) VALUES (346, 'u8KHTJf7uL5CC6nw4rcT'); 347 | INSERT INTO test_bean (id, description) VALUES (347, 'I1egDuVsYJlIO2ffbGCn'); 348 | INSERT INTO test_bean (id, description) VALUES (348, 'thR7rsd97wteCfI2DtVB'); 349 | INSERT INTO test_bean (id, description) VALUES (349, 'YwuyH8ghTfAKJmKtgJVj'); 350 | INSERT INTO test_bean (id, description) VALUES (350, 'k4B6HsGL8rsMWi06V0kU'); 351 | INSERT INTO test_bean (id, description) VALUES (351, '55HxXIbIKummHf0S3QvN'); 352 | INSERT INTO test_bean (id, description) VALUES (352, 'ICX7WnVkAfuYGFrpYEtz'); 353 | INSERT INTO test_bean (id, description) VALUES (353, '86vtDVLrS0roTA2oq79x'); 354 | INSERT INTO test_bean (id, description) VALUES (354, 'W4mPkfilZOxrNVem1iOR'); 355 | INSERT INTO test_bean (id, description) VALUES (355, 'Qm0ut91vxwc7iJTxG4cG'); 356 | INSERT INTO test_bean (id, description) VALUES (356, 'Jji5K7XCozeiJ8vC4VhC'); 357 | INSERT INTO test_bean (id, description) VALUES (357, 'rDH5ND5pRLQLPIcLcieU'); 358 | INSERT INTO test_bean (id, description) VALUES (358, '7zm0EauS9srsdo6RN7YA'); 359 | INSERT INTO test_bean (id, description) VALUES (359, '4Twyc3n68aaGoppXN7np'); 360 | INSERT INTO test_bean (id, description) VALUES (360, 'IBWexMrZWlUoNkfzrEQ1'); 361 | INSERT INTO test_bean (id, description) VALUES (361, 'enNgQbYFeI5rRwaugyO4'); 362 | INSERT INTO test_bean (id, description) VALUES (362, 'OQrSxHE2QdkyEzSPBHJz'); 363 | INSERT INTO test_bean (id, description) VALUES (363, '4ufgpg8SvyCJahOT3Y9f'); 364 | INSERT INTO test_bean (id, description) VALUES (364, 'J2iENXOdn92TzMgLT6Vo'); 365 | INSERT INTO test_bean (id, description) VALUES (365, 'ERJOwcpnwo92hqRLPbJk'); 366 | INSERT INTO test_bean (id, description) VALUES (366, 'nljlLq7yBeb1EtL1RRX9'); 367 | INSERT INTO test_bean (id, description) VALUES (367, 'E2fv1GGceCFyvciZ5wWH'); 368 | INSERT INTO test_bean (id, description) VALUES (368, 'RtU8SI1jYRCw6eigfUMh'); 369 | INSERT INTO test_bean (id, description) VALUES (369, 'pbp2I1POu7lih2OCOhji'); 370 | INSERT INTO test_bean (id, description) VALUES (370, 'LZYmdIN87AZ7pAgUSRpq'); 371 | INSERT INTO test_bean (id, description) VALUES (371, 'dyffjEaIx0pFSYTXcGmf'); 372 | INSERT INTO test_bean (id, description) VALUES (372, 'nXMFSmiQOVpql3oH1XlO'); 373 | INSERT INTO test_bean (id, description) VALUES (373, 'h6JPeMWDEGFRtArmCdHp'); 374 | INSERT INTO test_bean (id, description) VALUES (374, 'Gl9lxnsjvkNEimC1sHag'); 375 | INSERT INTO test_bean (id, description) VALUES (375, 'e1Hr3q7mkPEhH9SnMLgv'); 376 | INSERT INTO test_bean (id, description) VALUES (376, 'Zw4FGa95HAMca2fWSDLC'); 377 | INSERT INTO test_bean (id, description) VALUES (377, 'ltJ8D1w0Dcxf7NAHw993'); 378 | INSERT INTO test_bean (id, description) VALUES (378, 'pxm0a9w3qdINplmBvXIq'); 379 | INSERT INTO test_bean (id, description) VALUES (379, 'jNSAzz7lf7kb5SeaZstO'); 380 | INSERT INTO test_bean (id, description) VALUES (380, 'wcosqtRP9RwUGMiEj8kH'); 381 | INSERT INTO test_bean (id, description) VALUES (381, 'T5dMQwGVdNi512vwhWR1'); 382 | INSERT INTO test_bean (id, description) VALUES (382, 'iCaRQqyr7ZY2LHLczZ99'); 383 | INSERT INTO test_bean (id, description) VALUES (383, '2w0sjobbjqwzUGkjU3NU'); 384 | INSERT INTO test_bean (id, description) VALUES (384, 'GgiO4zOFp9ArK6NxmcMP'); 385 | INSERT INTO test_bean (id, description) VALUES (385, '5eC4ovRDHz2BFh8wbUaB'); 386 | INSERT INTO test_bean (id, description) VALUES (386, 'uh9TKrLkqF8nGD6M5aZ2'); 387 | INSERT INTO test_bean (id, description) VALUES (387, '9ucqYkwgXRM0XvWX1UGF'); 388 | INSERT INTO test_bean (id, description) VALUES (388, 'UfuryGwiNHuPNm9J9jSI'); 389 | INSERT INTO test_bean (id, description) VALUES (389, 'YjF18Zz6VGad99ByFglP'); 390 | INSERT INTO test_bean (id, description) VALUES (390, 'FQ4Pcw7pJAkZOfQqfk3V'); 391 | INSERT INTO test_bean (id, description) VALUES (391, 'soXt0eDt25b49797tEtQ'); 392 | INSERT INTO test_bean (id, description) VALUES (392, 'eVqF3VGvjiHEVt5Vy3Cr'); 393 | INSERT INTO test_bean (id, description) VALUES (393, 'a4HH6motcaqOXWKYqYB8'); 394 | INSERT INTO test_bean (id, description) VALUES (394, 'ZMOStU08B1iBizSZZ4He'); 395 | INSERT INTO test_bean (id, description) VALUES (395, 'xSNItCbLdGmS9gs9WiBT'); 396 | INSERT INTO test_bean (id, description) VALUES (396, 'AfHuy0xoiem2w4L6LiCv'); 397 | INSERT INTO test_bean (id, description) VALUES (397, 'G6OnRZjgFCOfGb4i5wZC'); 398 | INSERT INTO test_bean (id, description) VALUES (398, 'ZOxi2rtnUEJPjOrbXIaT'); 399 | INSERT INTO test_bean (id, description) VALUES (399, 'TpxMECWJawRye01lp0X1'); 400 | INSERT INTO test_bean (id, description) VALUES (400, 'amNSuuwit9RSxZC6RMHV'); 401 | INSERT INTO test_bean (id, description) VALUES (401, 'v7kPDdyTlCw2RBb662iz'); 402 | INSERT INTO test_bean (id, description) VALUES (402, 'hiPpTDDukxAFhpdzPFBG'); 403 | INSERT INTO test_bean (id, description) VALUES (403, 'IPNQ658wgwxofbkogNG2'); 404 | INSERT INTO test_bean (id, description) VALUES (404, 'ANTB5iumBr8pg0BqsQTY'); 405 | INSERT INTO test_bean (id, description) VALUES (405, '39OX6CP4MmU8VbMOZHCn'); 406 | INSERT INTO test_bean (id, description) VALUES (406, 'buDI1KlPxcGOllWHvaub'); 407 | INSERT INTO test_bean (id, description) VALUES (407, 'IdTlwlImCvCngJmZAUH4'); 408 | INSERT INTO test_bean (id, description) VALUES (408, 'medTzlTJbar97Vp8T0uP'); 409 | INSERT INTO test_bean (id, description) VALUES (409, 'FNVnR76aXYMeKEo0Ynr7'); 410 | INSERT INTO test_bean (id, description) VALUES (410, 'xlOPIO1zEogKsAMTNHPi'); 411 | INSERT INTO test_bean (id, description) VALUES (411, 'pVCkMLEkfROBjMg8SO9L'); 412 | INSERT INTO test_bean (id, description) VALUES (412, '4yQhzoPsiNK5FbTmNfgn'); 413 | INSERT INTO test_bean (id, description) VALUES (413, 'c972gYAxYL0SIH6uxhLg'); 414 | INSERT INTO test_bean (id, description) VALUES (414, 'lgOmCm2Q9K51dtDp8TDP'); 415 | INSERT INTO test_bean (id, description) VALUES (415, 'gL8t3WCkcmRUYLWbok34'); 416 | INSERT INTO test_bean (id, description) VALUES (416, 'XKFKgaDDS1ra3BsNBi3e'); 417 | INSERT INTO test_bean (id, description) VALUES (417, 'hpot8DEMpSf9YCvYsudi'); 418 | INSERT INTO test_bean (id, description) VALUES (418, 'nMTsEvUi48Pu9vFOdf6G'); 419 | INSERT INTO test_bean (id, description) VALUES (419, '2cPqJL2qXqFJXBuLUJLU'); 420 | INSERT INTO test_bean (id, description) VALUES (420, '9PM83aPxPrUd3SbakHRQ'); 421 | INSERT INTO test_bean (id, description) VALUES (421, 'NyXa21JG6kthKCwDqnDa'); 422 | INSERT INTO test_bean (id, description) VALUES (422, 'hPvz6HYMIRa9czn2M9LL'); 423 | INSERT INTO test_bean (id, description) VALUES (423, 'aC2MrA8Q87fomssOAoH7'); 424 | INSERT INTO test_bean (id, description) VALUES (424, 'U1jK5ajrJzrPeNDhYtRV'); 425 | INSERT INTO test_bean (id, description) VALUES (425, '6BnptjJkipPXYqxjMnaf'); 426 | INSERT INTO test_bean (id, description) VALUES (426, 'WXmprovaBhbxQIBYRLRM'); 427 | INSERT INTO test_bean (id, description) VALUES (427, 'joD0RZXGKFKT7SX1PH6x'); 428 | INSERT INTO test_bean (id, description) VALUES (428, 'ozkjHGx1Ur3tvF7Xc0a6'); 429 | INSERT INTO test_bean (id, description) VALUES (429, 'oSLzFfGWnU5ayp509JG4'); 430 | INSERT INTO test_bean (id, description) VALUES (430, 'qBV8hixdQhXPuPSnnhIa'); 431 | INSERT INTO test_bean (id, description) VALUES (431, 'CDOIOyRNS8g29Ti5SOTT'); 432 | INSERT INTO test_bean (id, description) VALUES (432, 'VLbznTuVFXTvfBFbCXqe'); 433 | INSERT INTO test_bean (id, description) VALUES (433, 'KJaEJCHOOd71OfGJT2in'); 434 | INSERT INTO test_bean (id, description) VALUES (434, '2ikWFdUuCnOmVXQ8KpIM'); 435 | INSERT INTO test_bean (id, description) VALUES (435, 'xlLrAnM93PiiyvJrsvV2'); 436 | INSERT INTO test_bean (id, description) VALUES (436, '8hCLvEcuv60CxXdnBeTL'); 437 | INSERT INTO test_bean (id, description) VALUES (437, 'U325vtLmP2di4wZWDg1P'); 438 | INSERT INTO test_bean (id, description) VALUES (438, 'U8jkLsE0qwuKXvHOnf3e'); 439 | INSERT INTO test_bean (id, description) VALUES (439, '401hypXvnQ25aDGZJseF'); 440 | INSERT INTO test_bean (id, description) VALUES (440, 'QhOetJtjBioV16RvaUSP'); 441 | INSERT INTO test_bean (id, description) VALUES (441, 'xibhXgZEqtWyI9kgLKpu'); 442 | INSERT INTO test_bean (id, description) VALUES (442, 'VaA3TWiOcaiJRJ3I7TUZ'); 443 | INSERT INTO test_bean (id, description) VALUES (443, 'FHszyHCo0AmPrMuUEOM0'); 444 | INSERT INTO test_bean (id, description) VALUES (444, 'Yfvx8CGfM3e5t0ZHscUC'); 445 | INSERT INTO test_bean (id, description) VALUES (445, 'EgkXxRN6Ddpqwt03Gohm'); 446 | INSERT INTO test_bean (id, description) VALUES (446, 'TOlkjqM4eXMFzQhGz3p6'); 447 | INSERT INTO test_bean (id, description) VALUES (447, 'D27oRe1GIxXRxLSozF1m'); 448 | INSERT INTO test_bean (id, description) VALUES (448, 'SgtYL8yDyJFZfM1KJYFy'); 449 | INSERT INTO test_bean (id, description) VALUES (449, 'caQvX3vz1GDvQtRUg1EX'); 450 | INSERT INTO test_bean (id, description) VALUES (450, 'TmPPMW5wHu6jBLJkdWoz'); 451 | INSERT INTO test_bean (id, description) VALUES (451, 'AWjb6RFJRYmuDSxOixHn'); 452 | INSERT INTO test_bean (id, description) VALUES (452, '3mAOeY6ZeXgCP6XuXqxI'); 453 | INSERT INTO test_bean (id, description) VALUES (453, 'sJL6cMMzZsr3VXVXr9gg'); 454 | INSERT INTO test_bean (id, description) VALUES (454, 'X22451Tb8hyIbSiZ8nbG'); 455 | INSERT INTO test_bean (id, description) VALUES (455, 'BqTCU2vfpjGcxwkH4URb'); 456 | INSERT INTO test_bean (id, description) VALUES (456, 'kbviFImIt7lfu06gg0GE'); 457 | INSERT INTO test_bean (id, description) VALUES (457, 'GlJYs4MvGlbtOhDJxnJi'); 458 | INSERT INTO test_bean (id, description) VALUES (458, 'dt9kU3mpr5eQLlOJjkum'); 459 | INSERT INTO test_bean (id, description) VALUES (459, 'TpXlM7XpAWzUMQemroT5'); 460 | INSERT INTO test_bean (id, description) VALUES (460, 'uaC5LpCTbQInOsrmet6b'); 461 | INSERT INTO test_bean (id, description) VALUES (461, 'xCFK8ocSa32yIZel43uL'); 462 | INSERT INTO test_bean (id, description) VALUES (462, 'Oy9nu9p9kvN8Ay775b49'); 463 | INSERT INTO test_bean (id, description) VALUES (463, 'x78H9JMms4138dxlG3nr'); 464 | INSERT INTO test_bean (id, description) VALUES (464, 'zVfgFiiPPvoMkUVKRua3'); 465 | INSERT INTO test_bean (id, description) VALUES (465, 'KPEQnkECm9TBYVdrZbJc'); 466 | INSERT INTO test_bean (id, description) VALUES (466, 'WRcVfpsGjL07O8pYo9hY'); 467 | INSERT INTO test_bean (id, description) VALUES (467, 'u2MC7Ald6lSLQbL8DcBW'); 468 | INSERT INTO test_bean (id, description) VALUES (468, 'Uhnugnzf2t6Jr7xZ2HP9'); 469 | INSERT INTO test_bean (id, description) VALUES (469, 'SxloOfVeusJgIjVyfC0y'); 470 | INSERT INTO test_bean (id, description) VALUES (470, 'R3MbyM4s5CcwkNfowZux'); 471 | INSERT INTO test_bean (id, description) VALUES (471, 'R8fyu26VDkMIFXu1wGC2'); 472 | INSERT INTO test_bean (id, description) VALUES (472, 'lReAhC1Ph2fVbJbsl5qq'); 473 | INSERT INTO test_bean (id, description) VALUES (473, 'SCG5fzzxOB2sQWziFBhH'); 474 | INSERT INTO test_bean (id, description) VALUES (474, '9jIcSmfSndFQ2WEV0vVz'); 475 | INSERT INTO test_bean (id, description) VALUES (475, 'AcaKoOVFDson8tDLYyFe'); 476 | INSERT INTO test_bean (id, description) VALUES (476, 'h8Mi2pNepZBewk21bV2T'); 477 | INSERT INTO test_bean (id, description) VALUES (477, 'n59SCHrUQoeV8hPIqLje'); 478 | INSERT INTO test_bean (id, description) VALUES (478, 'lZeQRPDkVwxkdK8RwPbS'); 479 | INSERT INTO test_bean (id, description) VALUES (479, 'o9vFwlklPFlbKiXOGyoA'); 480 | INSERT INTO test_bean (id, description) VALUES (480, 'Zaj1DE4R8DMwdhgEsoGX'); 481 | INSERT INTO test_bean (id, description) VALUES (481, 'oxSA5RfG3q8Qpwy0jfnH'); 482 | INSERT INTO test_bean (id, description) VALUES (482, 'JsVim4dnlZ7MbZj4LFJb'); 483 | INSERT INTO test_bean (id, description) VALUES (483, 'JEre6Ld7lj2sLor1jkD8'); 484 | INSERT INTO test_bean (id, description) VALUES (484, 'Bm3zwe4FU3wZyyuywc5o'); 485 | INSERT INTO test_bean (id, description) VALUES (485, 'I5AYnWTAK6nqJmGL049D'); 486 | INSERT INTO test_bean (id, description) VALUES (486, 'KQWeawcsqpRhSpQ6zUVI'); 487 | INSERT INTO test_bean (id, description) VALUES (487, 'd5AScQvG7MraB606Rm6W'); 488 | INSERT INTO test_bean (id, description) VALUES (488, 'e7vnRNpcUOrDlkJkefcA'); 489 | INSERT INTO test_bean (id, description) VALUES (489, 'HLGvLgLj7yysbL5mZ9b7'); 490 | INSERT INTO test_bean (id, description) VALUES (490, '7PYcComKnkwoE1ZCYAK0'); 491 | INSERT INTO test_bean (id, description) VALUES (491, 'abfFVaj3AxHmodl7J3vT'); 492 | INSERT INTO test_bean (id, description) VALUES (492, 'WlVHYL6rY6xcflzbYeYI'); 493 | INSERT INTO test_bean (id, description) VALUES (493, '0BLcI0j5vWgAXO3cDTHQ'); 494 | INSERT INTO test_bean (id, description) VALUES (494, 'DT1jmgty8OR1MgZnAsU8'); 495 | INSERT INTO test_bean (id, description) VALUES (495, 'CY8zXGZt5Ojo6u6ZoLmk'); 496 | INSERT INTO test_bean (id, description) VALUES (496, 'Ue1K3sb9OFnczrCiZlNd'); 497 | INSERT INTO test_bean (id, description) VALUES (497, '2DPlW3mDrYRuDwSghEFR'); 498 | INSERT INTO test_bean (id, description) VALUES (498, 'CWdOT2wqPeyig0nCCbkC'); 499 | INSERT INTO test_bean (id, description) VALUES (499, 'r3fXqclYh4BQ3hFHjA1j'); 500 | INSERT INTO test_bean (id, description) VALUES (500, 'HSf2hESvuEhdqjuHPD9b'); 501 | INSERT INTO test_bean (id, description) VALUES (501, 'qrGIBnjq7tlDSE6Pwf9U'); 502 | INSERT INTO test_bean (id, description) VALUES (502, 'Ef6gFOEABRyogGhdcp9k'); 503 | INSERT INTO test_bean (id, description) VALUES (503, 'B7ldI1EjEBVPapKwcsR0'); 504 | INSERT INTO test_bean (id, description) VALUES (504, 'Hbd4Vq1YmZiFT4FEM3rS'); 505 | INSERT INTO test_bean (id, description) VALUES (505, '0uchmqRDpKCMxJrfNl2Q'); 506 | INSERT INTO test_bean (id, description) VALUES (506, 'vCHmpO0QMBg3KnwVu5Yp'); 507 | INSERT INTO test_bean (id, description) VALUES (507, 'UxH6rvUMtI9EoJuDmH5T'); 508 | INSERT INTO test_bean (id, description) VALUES (508, 'kEvNkic27AgXWBQ7MzX2'); 509 | INSERT INTO test_bean (id, description) VALUES (509, 'afG5qWQIifcOTGb9kvhD'); 510 | INSERT INTO test_bean (id, description) VALUES (510, 'Ygj2qNkuabjtHV3jJwjx'); 511 | INSERT INTO test_bean (id, description) VALUES (511, '5fcvrxMf7JGlwhoKkKWR'); 512 | INSERT INTO test_bean (id, description) VALUES (512, 'fSwMMhxWEsB2d0AnuHSw'); 513 | INSERT INTO test_bean (id, description) VALUES (513, '2zGstItv2Dyn038r7BwU'); 514 | INSERT INTO test_bean (id, description) VALUES (514, 'NIbqlr86mHwr4brYpstl'); 515 | INSERT INTO test_bean (id, description) VALUES (515, 'jmNVFbR3qkRRiEAL6eHY'); 516 | INSERT INTO test_bean (id, description) VALUES (516, 'BT5hNEqIeJfpj9RO1VQG'); 517 | INSERT INTO test_bean (id, description) VALUES (517, 'mJGtinl0IbZwvqKZeFaa'); 518 | INSERT INTO test_bean (id, description) VALUES (518, 'oTwJU6Xf1hSCYC6y2qhg'); 519 | INSERT INTO test_bean (id, description) VALUES (519, 'ZYLBltAzOqkP5BRJCkVk'); 520 | INSERT INTO test_bean (id, description) VALUES (520, 'qoMJ5x1bxF94itxjOK9r'); 521 | INSERT INTO test_bean (id, description) VALUES (521, '2UBREiIhWheRPPFa2lLU'); 522 | INSERT INTO test_bean (id, description) VALUES (522, 'pQFyTw0Q3lShPNJHp98N'); 523 | INSERT INTO test_bean (id, description) VALUES (523, '9raKaFASO05DHinItwkJ'); 524 | INSERT INTO test_bean (id, description) VALUES (524, '9SDCj5EGC9ErsX2IchD7'); 525 | INSERT INTO test_bean (id, description) VALUES (525, 'rKRVKjcclKJWJbxUr5aR'); 526 | INSERT INTO test_bean (id, description) VALUES (526, 'jQ2wn2BvqjbHlndnrGeV'); 527 | INSERT INTO test_bean (id, description) VALUES (527, 'urxUEOxdxZJBuFEyW5Mz'); 528 | INSERT INTO test_bean (id, description) VALUES (528, '9XDxYBkJaQGRCXbGiNCy'); 529 | INSERT INTO test_bean (id, description) VALUES (529, 'ZJM7Myynkx6vinCLtdbc'); 530 | INSERT INTO test_bean (id, description) VALUES (530, '8v0kmCu0nWrTZ8lvlRcd'); 531 | INSERT INTO test_bean (id, description) VALUES (531, 'R63nQFHjcyrIXWNrvT2T'); 532 | INSERT INTO test_bean (id, description) VALUES (532, 'LtI6rt7mrBTaUILgyI1K'); 533 | INSERT INTO test_bean (id, description) VALUES (533, 'zkFBhokYtBAGEOphn0z8'); 534 | INSERT INTO test_bean (id, description) VALUES (534, 'oH2ERuApGAiFwLLOLFMD'); 535 | INSERT INTO test_bean (id, description) VALUES (535, 'GnVXBAXx8XMc84zgmI6Y'); 536 | INSERT INTO test_bean (id, description) VALUES (536, 'vjyCYIjxXKhNWYUhm9s2'); 537 | INSERT INTO test_bean (id, description) VALUES (537, 'Hyk2xkWwoiuvkRuGYNUU'); 538 | INSERT INTO test_bean (id, description) VALUES (538, 'N9SKwYp0Vs3LYo3pJv2U'); 539 | INSERT INTO test_bean (id, description) VALUES (539, '7n0xeV6CHUm3hFyObWAf'); 540 | INSERT INTO test_bean (id, description) VALUES (540, 'vhKanQlXuDToSwXHLl2S'); 541 | INSERT INTO test_bean (id, description) VALUES (541, 'A88DfsG9rBxTsAyeT0aF'); 542 | INSERT INTO test_bean (id, description) VALUES (542, 'dSRlorfC4kdc8ZpwfVnM'); 543 | INSERT INTO test_bean (id, description) VALUES (543, 'Cvzhqktkslz2m7fcBGNG'); 544 | INSERT INTO test_bean (id, description) VALUES (544, 'OyjubUhwWbbOgCZmMTGt'); 545 | INSERT INTO test_bean (id, description) VALUES (545, 'NVZUIZRHJ3tNVIIa5fnn'); 546 | INSERT INTO test_bean (id, description) VALUES (546, 'bEYIYNAZzKxQS9IHZT0g'); 547 | INSERT INTO test_bean (id, description) VALUES (547, 'w1a9Ms59AXH6qlThLhRE'); 548 | INSERT INTO test_bean (id, description) VALUES (548, '7rqRC3eHDiRrATwgdvDT'); 549 | INSERT INTO test_bean (id, description) VALUES (549, 'mtvEcLN4dP9SmUI9PMPi'); 550 | INSERT INTO test_bean (id, description) VALUES (550, 'oaO9D6kOMFyc3U35VsRT'); 551 | INSERT INTO test_bean (id, description) VALUES (551, 'OsbqhE6olVK5VkiNk80J'); 552 | INSERT INTO test_bean (id, description) VALUES (552, 'Ij3VEyVPbjW2ekYuoNN8'); 553 | INSERT INTO test_bean (id, description) VALUES (553, 'dYSM7ZfnCVdMiBDcaE6r'); 554 | INSERT INTO test_bean (id, description) VALUES (554, 'SRvtxj8JoNJU1cfyGRPG'); 555 | INSERT INTO test_bean (id, description) VALUES (555, 'smyI4oKzjYbY8Bx1NJ9q'); 556 | INSERT INTO test_bean (id, description) VALUES (556, '5NafnrbZM0rsJsm2OGcg'); 557 | INSERT INTO test_bean (id, description) VALUES (557, '69x5z0LmaO2WKTEQ5L4S'); 558 | INSERT INTO test_bean (id, description) VALUES (558, 'WuKuDuZVBPfije925lEr'); 559 | INSERT INTO test_bean (id, description) VALUES (559, 'usLuP3J1fIRlsDJwSq3g'); 560 | INSERT INTO test_bean (id, description) VALUES (560, 'TQL9RjrCPaHm78OPMbvi'); 561 | INSERT INTO test_bean (id, description) VALUES (561, 'NDPq97FNFYu1Euzs6zOw'); 562 | INSERT INTO test_bean (id, description) VALUES (562, 'wgnTyb2sncdB9E5zYq2M'); 563 | INSERT INTO test_bean (id, description) VALUES (563, 'pwUddHviJLwGAm8mlkel'); 564 | INSERT INTO test_bean (id, description) VALUES (564, 'EvYCWG94SgSBuTPXT6A1'); 565 | INSERT INTO test_bean (id, description) VALUES (565, 'gOA70PrtQPWA4WhmthO5'); 566 | INSERT INTO test_bean (id, description) VALUES (566, 'WWZcco3pwO52A8JurHIJ'); 567 | INSERT INTO test_bean (id, description) VALUES (567, 'gV4J53nD5A3Ni3O32eft'); 568 | INSERT INTO test_bean (id, description) VALUES (568, 'Lxk1u9rm0BB4jSd34i6v'); 569 | INSERT INTO test_bean (id, description) VALUES (569, 'WblBBQHw3XFixBCaGBTX'); 570 | INSERT INTO test_bean (id, description) VALUES (570, '5diRLvUo0t98CNPA7k36'); 571 | INSERT INTO test_bean (id, description) VALUES (571, 'cgps4dg3tpu846hlCdWf'); 572 | INSERT INTO test_bean (id, description) VALUES (572, 'iJF5k8cUdiXyQqJGkvhO'); 573 | INSERT INTO test_bean (id, description) VALUES (573, 'WsAQK7y4APah0HDsfvvw'); 574 | INSERT INTO test_bean (id, description) VALUES (574, 'CX2ZQb1uiSfk9s5pP74R'); 575 | INSERT INTO test_bean (id, description) VALUES (575, 'NR73PyvzDt8EQeLEYyhV'); 576 | INSERT INTO test_bean (id, description) VALUES (576, '4DRCVZS1MFbjCG35RoTA'); 577 | INSERT INTO test_bean (id, description) VALUES (577, 'uWoa9EOQjKoNZrLQGuWV'); 578 | INSERT INTO test_bean (id, description) VALUES (578, 'bo6b9MosuSa1DUOJdTJm'); 579 | INSERT INTO test_bean (id, description) VALUES (579, '7AluHM68lMOEdAhd0x0A'); 580 | INSERT INTO test_bean (id, description) VALUES (580, 'WxYAKUQGy6ajhKW51BVG'); 581 | INSERT INTO test_bean (id, description) VALUES (581, 'VDyjiLp5P1hnNv5F7Pti'); 582 | INSERT INTO test_bean (id, description) VALUES (582, '7rgiMDJXswILDJJepwIl'); 583 | INSERT INTO test_bean (id, description) VALUES (583, 'wWUmbJr3wwcAAWSxmRYa'); 584 | INSERT INTO test_bean (id, description) VALUES (584, 'jwuBmdDwvwa9TCFL3Zbe'); 585 | INSERT INTO test_bean (id, description) VALUES (585, 'cTZZqCJkAy3yRbqcBtDT'); 586 | INSERT INTO test_bean (id, description) VALUES (586, 'fPPyvRDh0wpL1UCiY70o'); 587 | INSERT INTO test_bean (id, description) VALUES (587, 'k3jDdixfPfMVMGEirkfI'); 588 | INSERT INTO test_bean (id, description) VALUES (588, '0JisNFjoLOcLfReAkHRf'); 589 | INSERT INTO test_bean (id, description) VALUES (589, 'KeLnC7g2iEGHj2MoumcC'); 590 | INSERT INTO test_bean (id, description) VALUES (590, 'RZ5wULqRtHIZDwnSGUNZ'); 591 | INSERT INTO test_bean (id, description) VALUES (591, 'DiJ5HRWL041fksrTgEIO'); 592 | INSERT INTO test_bean (id, description) VALUES (592, 'eblAKrJxeKnsKEhYj1LJ'); 593 | INSERT INTO test_bean (id, description) VALUES (593, 'mbhWfNnecbfEjJESQAx9'); 594 | INSERT INTO test_bean (id, description) VALUES (594, 'x86FwN79kGUXI9xylsKl'); 595 | INSERT INTO test_bean (id, description) VALUES (595, '8uvF9846iokYILNhLKb8'); 596 | INSERT INTO test_bean (id, description) VALUES (596, 'bDyyMkwmxCgUCvvObkCm'); 597 | INSERT INTO test_bean (id, description) VALUES (597, 'aYlrX9coBYa7YvIcOb2u'); 598 | INSERT INTO test_bean (id, description) VALUES (598, '7M9YmABfjnXLlEQfaeVp'); 599 | INSERT INTO test_bean (id, description) VALUES (599, '8KbaopoEEXS8qG25TeWB'); 600 | INSERT INTO test_bean (id, description) VALUES (600, 'xHcDz2g8CwFH7lVQ5luc'); 601 | INSERT INTO test_bean (id, description) VALUES (601, 'zuG5z77vFyRx8VVLqToS'); 602 | INSERT INTO test_bean (id, description) VALUES (602, 'Kcez1i4oGHvp27Z5iltI'); 603 | INSERT INTO test_bean (id, description) VALUES (603, 'tQX4P5TMOCcQUPQwsJRY'); 604 | INSERT INTO test_bean (id, description) VALUES (604, '6VfoiWeo86SO9O1pvnQZ'); 605 | INSERT INTO test_bean (id, description) VALUES (605, 'Lm1EArPjxiEcNFvJ4JM4'); 606 | INSERT INTO test_bean (id, description) VALUES (606, 'IivJ6k0sTTtL5aJK4Fub'); 607 | INSERT INTO test_bean (id, description) VALUES (607, 'lmPbwBGg5bx49vKXsEda'); 608 | INSERT INTO test_bean (id, description) VALUES (608, 'w85evM9SbYcHJVXvvREL'); 609 | INSERT INTO test_bean (id, description) VALUES (609, 'bQ8VTQ5pRLSuTwtEbBDi'); 610 | INSERT INTO test_bean (id, description) VALUES (610, 'soDtiidI59UGHwU8hs4x'); 611 | INSERT INTO test_bean (id, description) VALUES (611, '9mOZPMdsBrCOo1MRz9G5'); 612 | INSERT INTO test_bean (id, description) VALUES (612, 'UrhUj2MZN3pLnSRP0L5m'); 613 | INSERT INTO test_bean (id, description) VALUES (613, 'i5WLHgRNqlpNiBZGXDNg'); 614 | INSERT INTO test_bean (id, description) VALUES (614, 'wgAI7E7HV57RKml5KYvU'); 615 | INSERT INTO test_bean (id, description) VALUES (615, 'rvZK7AvxVZ47mq9OuxJR'); 616 | INSERT INTO test_bean (id, description) VALUES (616, 'U3SHn2jAVZeUDZtCZGMO'); 617 | INSERT INTO test_bean (id, description) VALUES (617, 'rV9HCnwyV15hL4FvkGZ6'); 618 | INSERT INTO test_bean (id, description) VALUES (618, 'DWTEc3LHABIx7j4MRU6g'); 619 | INSERT INTO test_bean (id, description) VALUES (619, 'EUX1w6dlXiQBL7ZhMYdW'); 620 | INSERT INTO test_bean (id, description) VALUES (620, 'HCMGFwQ2JjAJ6zvVJ1YP'); 621 | INSERT INTO test_bean (id, description) VALUES (621, 'hHbRJOPJSjjA4pCarqRR'); 622 | INSERT INTO test_bean (id, description) VALUES (622, 'KafcblrGLam5ERGKknaw'); 623 | INSERT INTO test_bean (id, description) VALUES (623, 'cGd9rWDThnxEFxuwJ4se'); 624 | INSERT INTO test_bean (id, description) VALUES (624, 'WW4sSt1hmDFvi8WginPH'); 625 | INSERT INTO test_bean (id, description) VALUES (625, 'laj3sC3fGIxHxr44G4zI'); 626 | INSERT INTO test_bean (id, description) VALUES (626, 'sAuZ464utr7W886pAjSW'); 627 | INSERT INTO test_bean (id, description) VALUES (627, 'dyVn7tMOz1VcDJxJAvO1'); 628 | INSERT INTO test_bean (id, description) VALUES (628, 'EKJHFJn1HVtWqPtp2C7S'); 629 | INSERT INTO test_bean (id, description) VALUES (629, '3kVsM2Qm687zd4DYRNMT'); 630 | INSERT INTO test_bean (id, description) VALUES (630, 'OmtDgyEHzXbZd55MRSl1'); 631 | INSERT INTO test_bean (id, description) VALUES (631, 'PChPO7HifEUrPIQPzlgh'); 632 | INSERT INTO test_bean (id, description) VALUES (632, 'pQhijhMIkKBZmreiwcjZ'); 633 | INSERT INTO test_bean (id, description) VALUES (633, 'iQDkOA1TIqoEuFU5zBiF'); 634 | INSERT INTO test_bean (id, description) VALUES (634, 'rgiOlGelkQfIGJVGVwb4'); 635 | INSERT INTO test_bean (id, description) VALUES (635, '9LN2EHNITWfq8E5P47P6'); 636 | INSERT INTO test_bean (id, description) VALUES (636, '9YWlZEq8CH5FfT0OhAtj'); 637 | INSERT INTO test_bean (id, description) VALUES (637, 'sGKWqlF7VKaQsKuOJcsI'); 638 | INSERT INTO test_bean (id, description) VALUES (638, '2jme3DnuNHEDQmNrrhA2'); 639 | INSERT INTO test_bean (id, description) VALUES (639, 'jBLHF1jfUzvCXhLYsjIX'); 640 | INSERT INTO test_bean (id, description) VALUES (640, 'UkwZphEOSwow7yiPuimt'); 641 | INSERT INTO test_bean (id, description) VALUES (641, '1ptDwKVZdIpvC0QgpmzW'); 642 | INSERT INTO test_bean (id, description) VALUES (642, 'awwz3lvZUkO5eHBEBdx8'); 643 | INSERT INTO test_bean (id, description) VALUES (643, 'eVodkzfos4zvffaFFDIF'); 644 | INSERT INTO test_bean (id, description) VALUES (644, 'kChPjZHCx7ADYnSvBdMO'); 645 | INSERT INTO test_bean (id, description) VALUES (645, '0GbCGzGYbl1LmXJtJV23'); 646 | INSERT INTO test_bean (id, description) VALUES (646, 'GijJ6IPsahS4hMEBdSIk'); 647 | INSERT INTO test_bean (id, description) VALUES (647, 'jR7CJVeDykt2IWnd3Zky'); 648 | INSERT INTO test_bean (id, description) VALUES (648, 'YOcNllaHweXKHqSIwc06'); 649 | INSERT INTO test_bean (id, description) VALUES (649, 'rLfV231tHUhNrdaz8LGt'); 650 | INSERT INTO test_bean (id, description) VALUES (650, '1BOWpNYrYCGq18QRHAbu'); 651 | INSERT INTO test_bean (id, description) VALUES (651, '2GDpnhq1FZa0ewcJPI9V'); 652 | INSERT INTO test_bean (id, description) VALUES (652, 'uKMGRJjWQI5jFQhUsevg'); 653 | INSERT INTO test_bean (id, description) VALUES (653, 'vbXrQdWsTIjBUJ9PbWEh'); 654 | INSERT INTO test_bean (id, description) VALUES (654, 'BlVwYRWPIt5bXc2Fn64h'); 655 | INSERT INTO test_bean (id, description) VALUES (655, 'AQmnEZ5UtxRd9NLsgoF6'); 656 | INSERT INTO test_bean (id, description) VALUES (656, 'Odp0lCIAbQ9swpveFBFU'); 657 | INSERT INTO test_bean (id, description) VALUES (657, 'lVlevavlK0zyiQN3AVqN'); 658 | INSERT INTO test_bean (id, description) VALUES (658, '6hfUTa5CxHYXdfaJEKYc'); 659 | INSERT INTO test_bean (id, description) VALUES (659, 'N4vhH2WigYVg0bXwiPmg'); 660 | INSERT INTO test_bean (id, description) VALUES (660, 'pgJsOtlV6r0r7jTzn6hn'); 661 | INSERT INTO test_bean (id, description) VALUES (661, 'wlFjmA8sBHA9DoL2P278'); 662 | INSERT INTO test_bean (id, description) VALUES (662, 'tfHv6cuwTuwzb2EBnQF7'); 663 | INSERT INTO test_bean (id, description) VALUES (663, 'cr2CvA6sjsxoR9n3mtVU'); 664 | INSERT INTO test_bean (id, description) VALUES (664, 'E0qXd4J868vNPzRCUKxM'); 665 | INSERT INTO test_bean (id, description) VALUES (665, 'rd54gMkEDPcGUtkz9Dvw'); 666 | INSERT INTO test_bean (id, description) VALUES (666, 'izGZZLVFY5uB64NKSLSu'); 667 | INSERT INTO test_bean (id, description) VALUES (667, 'RFyZfAxujJztfdRatulu'); 668 | INSERT INTO test_bean (id, description) VALUES (668, 'e0B14Szg98gnYhbokDgN'); 669 | INSERT INTO test_bean (id, description) VALUES (669, 'HgaGjhDAqrV476s7RwoW'); 670 | INSERT INTO test_bean (id, description) VALUES (670, 'j980lu9ZjHeK3mE0R4V8'); 671 | INSERT INTO test_bean (id, description) VALUES (671, 'rQJtBYm3HpsdXqO2VCWx'); 672 | INSERT INTO test_bean (id, description) VALUES (672, 'mlYN6hPOUdEXa51kmppu'); 673 | INSERT INTO test_bean (id, description) VALUES (673, 'LA57jBUvRoS5Nq3S2tic'); 674 | INSERT INTO test_bean (id, description) VALUES (674, 'WjhF4MAxk9AjRqBlcKmG'); 675 | INSERT INTO test_bean (id, description) VALUES (675, '6EFKE7eebYR2Y3GIg3Du'); 676 | INSERT INTO test_bean (id, description) VALUES (676, 'VEz78YN7yV2Kdc9puOEC'); 677 | INSERT INTO test_bean (id, description) VALUES (677, 'MewrYN0kV0hM9WRb6SGf'); 678 | INSERT INTO test_bean (id, description) VALUES (678, 'YfwuDWL5nQ6jz2w1T6F3'); 679 | INSERT INTO test_bean (id, description) VALUES (679, 'kjVaG4LUT8UEDzLHCzsf'); 680 | INSERT INTO test_bean (id, description) VALUES (680, 'DcbAop1bFBtrvzOHtTQb'); 681 | INSERT INTO test_bean (id, description) VALUES (681, 'SZ6fWG7zbdAWWApA65wS'); 682 | INSERT INTO test_bean (id, description) VALUES (682, 'i5PL9lyArT2jh7LPnLdS'); 683 | INSERT INTO test_bean (id, description) VALUES (683, 'Qs97m0PBWHupzZN4RMeu'); 684 | INSERT INTO test_bean (id, description) VALUES (684, 'YmGVi3MIBiNAIRaYW94R'); 685 | INSERT INTO test_bean (id, description) VALUES (685, 'ZYXFvQLxcaM5tGnkS4hf'); 686 | INSERT INTO test_bean (id, description) VALUES (686, 'TsGFM5ClmGClY3yz8M2f'); 687 | INSERT INTO test_bean (id, description) VALUES (687, 'G0AiU5IVPd9LvsnAwViM'); 688 | INSERT INTO test_bean (id, description) VALUES (688, 'SWttQ3k98kxfoRh2OC0I'); 689 | INSERT INTO test_bean (id, description) VALUES (689, 'p3ZsFNzbXQ5M0AyS3N33'); 690 | INSERT INTO test_bean (id, description) VALUES (690, 'jqJQN0e1KXxRFdEIpREE'); 691 | INSERT INTO test_bean (id, description) VALUES (691, 'ngttc85rbKWOsXZf5LWr'); 692 | INSERT INTO test_bean (id, description) VALUES (692, 'FDQx91PG5PLEVV36TApp'); 693 | INSERT INTO test_bean (id, description) VALUES (693, 'K9ZXaBPrr9qW6CYf5kzE'); 694 | INSERT INTO test_bean (id, description) VALUES (694, 'kTMJiEp7uIEKapkeTevi'); 695 | INSERT INTO test_bean (id, description) VALUES (695, 'ZdE15wWUmjlCVTFx5PtX'); 696 | INSERT INTO test_bean (id, description) VALUES (696, 'BeqLUOtVUbh5xw2k4ZwU'); 697 | INSERT INTO test_bean (id, description) VALUES (697, 'W5Ibh5bIruvV6samptOh'); 698 | INSERT INTO test_bean (id, description) VALUES (698, 'g83PcX1jN2f109vf4txC'); 699 | INSERT INTO test_bean (id, description) VALUES (699, 'E0jaCgiTgT8EPU9GiN0U'); 700 | INSERT INTO test_bean (id, description) VALUES (700, 'W9Fn2Oss7bnKF4RXLVhr'); 701 | INSERT INTO test_bean (id, description) VALUES (701, '4SdmtSZSnPfpZLKfhKfU'); 702 | INSERT INTO test_bean (id, description) VALUES (702, 'RYQeo4dTznx3UhWPMsHF'); 703 | INSERT INTO test_bean (id, description) VALUES (703, 'tW1d0UCeCi5nSUezHiBE'); 704 | INSERT INTO test_bean (id, description) VALUES (704, 'QEOhtLP46fW8aKPMfnGw'); 705 | INSERT INTO test_bean (id, description) VALUES (705, 'bXZ8H3mot3Wthb6SwgGr'); 706 | INSERT INTO test_bean (id, description) VALUES (706, '2sORbKT4TzTPq58mwwOX'); 707 | INSERT INTO test_bean (id, description) VALUES (707, 'AgMo7t5KZZO64evn1p8T'); 708 | INSERT INTO test_bean (id, description) VALUES (708, '6Sus4LRK4rfCT62Q7gn5'); 709 | INSERT INTO test_bean (id, description) VALUES (709, 'ff7AThwO1bjQKURYN4QV'); 710 | INSERT INTO test_bean (id, description) VALUES (710, 't9BhUCkKkGY59IkLr8CE'); 711 | INSERT INTO test_bean (id, description) VALUES (711, 'tCc7SFG4bshWFCl0YPHQ'); 712 | INSERT INTO test_bean (id, description) VALUES (712, 'OnEMqrXTlQM7VR5zWazr'); 713 | INSERT INTO test_bean (id, description) VALUES (713, 'Kvag9kNX6dZBrbgYnAmw'); 714 | INSERT INTO test_bean (id, description) VALUES (714, 'F2sYRBeqJzmx6YnoEaLu'); 715 | INSERT INTO test_bean (id, description) VALUES (715, '88VQzNljf6l5vJ8nnYem'); 716 | INSERT INTO test_bean (id, description) VALUES (716, '5wsnR8eubXfFCQenwUzg'); 717 | INSERT INTO test_bean (id, description) VALUES (717, 'YgES9f39yiyjCO770DoL'); 718 | INSERT INTO test_bean (id, description) VALUES (718, 'jOVAvKVKBb8568vhTLty'); 719 | INSERT INTO test_bean (id, description) VALUES (719, 'BwSDadIa2s2HcyJuH2hs'); 720 | INSERT INTO test_bean (id, description) VALUES (720, 'CG9itShTeVUj4eSaVxIo'); 721 | INSERT INTO test_bean (id, description) VALUES (721, 'e17HpeHDaRWzxbVm1Ze0'); 722 | INSERT INTO test_bean (id, description) VALUES (722, 'ib6gi5EL5u78wAKNiCD7'); 723 | INSERT INTO test_bean (id, description) VALUES (723, 'e5IM8jWehBn3VjNfdzh0'); 724 | INSERT INTO test_bean (id, description) VALUES (724, 'W9J6DthFvWEfmiyruuwj'); 725 | INSERT INTO test_bean (id, description) VALUES (725, 'FfBX2pbKQZXowBJf728Z'); 726 | INSERT INTO test_bean (id, description) VALUES (726, 'TIMWiEyMC9eYFhiSBlpW'); 727 | INSERT INTO test_bean (id, description) VALUES (727, 'xaRmXwQRe9xNlpePYTp5'); 728 | INSERT INTO test_bean (id, description) VALUES (728, 'OZ9dtz5D9tt8E6z3PFIe'); 729 | INSERT INTO test_bean (id, description) VALUES (729, 'JauTpjY2t9O3ydGsE6UP'); 730 | INSERT INTO test_bean (id, description) VALUES (730, 'h3teGpmCJODhMRl0Ss4k'); 731 | INSERT INTO test_bean (id, description) VALUES (731, 'KJRElsGRDAYWca5mQq2J'); 732 | INSERT INTO test_bean (id, description) VALUES (732, 'cNQ87bhIoqy6aK2vgd77'); 733 | INSERT INTO test_bean (id, description) VALUES (733, 'Rmf35fiuisaU19WWLgPn'); 734 | INSERT INTO test_bean (id, description) VALUES (734, 'IywuFeEUOPXV2LB3aELm'); 735 | INSERT INTO test_bean (id, description) VALUES (735, 'Sv0KE3hmNVum9z3K8ds6'); 736 | INSERT INTO test_bean (id, description) VALUES (736, 'szKREuil5ESev58tkAkF'); 737 | INSERT INTO test_bean (id, description) VALUES (737, 'CEQ4u6y8hnFuIlnjpd0I'); 738 | INSERT INTO test_bean (id, description) VALUES (738, 'BHC5NbTOMG7Sho5qMNYF'); 739 | INSERT INTO test_bean (id, description) VALUES (739, 'hTbFUcyPUKa548YynQfu'); 740 | INSERT INTO test_bean (id, description) VALUES (740, '2INhLNgXwXfDMwwg4p4y'); 741 | INSERT INTO test_bean (id, description) VALUES (741, 'TQNtZ9DKBqr74CcL9p20'); 742 | INSERT INTO test_bean (id, description) VALUES (742, 'yftTPe18yC8g9OQcmq5w'); 743 | INSERT INTO test_bean (id, description) VALUES (743, 's3jwTjN5k8QftYMcqCm3'); 744 | INSERT INTO test_bean (id, description) VALUES (744, 'S69QWpEdL2GgVXPKGgOJ'); 745 | INSERT INTO test_bean (id, description) VALUES (745, 'N4gRsSXr4tvfWqAJUDTg'); 746 | INSERT INTO test_bean (id, description) VALUES (746, 'ilF4PAD6CCuuSuC0e7zS'); 747 | INSERT INTO test_bean (id, description) VALUES (747, 'JOu3jlgDgDSepsiTFg4N'); 748 | INSERT INTO test_bean (id, description) VALUES (748, '2H6yHqrAsFyU5M4ijqhB'); 749 | INSERT INTO test_bean (id, description) VALUES (749, 'dmn1BL6Jj4fBKSQgsAVv'); 750 | INSERT INTO test_bean (id, description) VALUES (750, 'tEQkn593tfY80giSrEjn'); 751 | INSERT INTO test_bean (id, description) VALUES (751, 'zAIk3jhB3tmhrWgPTDlb'); 752 | INSERT INTO test_bean (id, description) VALUES (752, 'UMLU7jbVLTqfjO55J2y6'); 753 | INSERT INTO test_bean (id, description) VALUES (753, 'LQeuEyE8M0Z1tRe2KAtE'); 754 | INSERT INTO test_bean (id, description) VALUES (754, '7gEiD4mHb66NBrCMboSA'); 755 | INSERT INTO test_bean (id, description) VALUES (755, 'r0lQkWom1SYWHdPKazj5'); 756 | INSERT INTO test_bean (id, description) VALUES (756, 'BjrrHcA94zZuMXDkZY9S'); 757 | INSERT INTO test_bean (id, description) VALUES (757, 'ZQspj6vY3PIWkjSr6nul'); 758 | INSERT INTO test_bean (id, description) VALUES (758, 'jwj041RCCXd4tZeStuoc'); 759 | INSERT INTO test_bean (id, description) VALUES (759, 'nk9wwTXVtF9woroAl6JV'); 760 | INSERT INTO test_bean (id, description) VALUES (760, 'k6KP237q621ZrgN5Wfqc'); 761 | INSERT INTO test_bean (id, description) VALUES (761, 'fvSmoTIq16RRU0ek0SFk'); 762 | INSERT INTO test_bean (id, description) VALUES (762, 'kO0XG0xHwrC4eJJU1fbz'); 763 | INSERT INTO test_bean (id, description) VALUES (763, 'QqJXhR6m2vOXR5QjLHgr'); 764 | INSERT INTO test_bean (id, description) VALUES (764, 'xeYlGpBrDtbytb2roGZ7'); 765 | INSERT INTO test_bean (id, description) VALUES (765, 'P7zChJpiGOZ8e2107aRv'); 766 | INSERT INTO test_bean (id, description) VALUES (766, '5yDFGnOTaUsYWypUeR09'); 767 | INSERT INTO test_bean (id, description) VALUES (767, '4ybxvyWzzCVUVUTxClkj'); 768 | INSERT INTO test_bean (id, description) VALUES (768, 'SGmkgNjnhTBwqsXl1Y5P'); 769 | INSERT INTO test_bean (id, description) VALUES (769, 'SUKko4JLibv1THelIxWS'); 770 | INSERT INTO test_bean (id, description) VALUES (770, 'nNlie9ZUuJ8vu5vTd9Sz'); 771 | INSERT INTO test_bean (id, description) VALUES (771, 'mK8yXKUoINxecKCaIV2S'); 772 | INSERT INTO test_bean (id, description) VALUES (772, '4TEA5usmebVderLwnf0T'); 773 | INSERT INTO test_bean (id, description) VALUES (773, 'zIQyFpj1tdrSegHDPThu'); 774 | INSERT INTO test_bean (id, description) VALUES (774, 'rB61XDuke4EcmMFOoEZu'); 775 | INSERT INTO test_bean (id, description) VALUES (775, '0rnO2OQ14rUEarxoS65v'); 776 | INSERT INTO test_bean (id, description) VALUES (776, 'dbJsBvwM4HJn5hyOgy2C'); 777 | INSERT INTO test_bean (id, description) VALUES (777, 'MauLp52su0vYpyHbjUSM'); 778 | INSERT INTO test_bean (id, description) VALUES (778, 'yCNh9DsILVlmbjAOPfAn'); 779 | INSERT INTO test_bean (id, description) VALUES (779, 'pV9DqHRzP3GSgWbC1hj4'); 780 | INSERT INTO test_bean (id, description) VALUES (780, 'qrFQqhkFjzjEq1YO5IMX'); 781 | INSERT INTO test_bean (id, description) VALUES (781, 'c19QanNg6bHVbrUL0uNt'); 782 | INSERT INTO test_bean (id, description) VALUES (782, '7nqZbkQ7r0WF7E6PDOYH'); 783 | INSERT INTO test_bean (id, description) VALUES (783, '6oeygOo9kC5HCnpK8nKW'); 784 | INSERT INTO test_bean (id, description) VALUES (784, 'YIdhKlgBnP9zvZ1JJtac'); 785 | INSERT INTO test_bean (id, description) VALUES (785, 'C5ruj4alGYWzOqLkJjpT'); 786 | INSERT INTO test_bean (id, description) VALUES (786, 'R8ktCi7NcASFR6zOlrcG'); 787 | INSERT INTO test_bean (id, description) VALUES (787, 'HEAx8Kw4t5ioxcw7zS0f'); 788 | INSERT INTO test_bean (id, description) VALUES (788, '7mj3bQK69sR5O744zzzP'); 789 | INSERT INTO test_bean (id, description) VALUES (789, 'rPucdQSZ8lOW8tkxUcw7'); 790 | INSERT INTO test_bean (id, description) VALUES (790, 'nm4ITf55WOm9XUdrmrD6'); 791 | INSERT INTO test_bean (id, description) VALUES (791, '0nDP2OXU5RBrfgCvrow3'); 792 | INSERT INTO test_bean (id, description) VALUES (792, '67urVkA7w7mmmfNYRXs1'); 793 | INSERT INTO test_bean (id, description) VALUES (793, 'YtXh5I30M4t6t61pdIfq'); 794 | INSERT INTO test_bean (id, description) VALUES (794, 'cxx00XQMb4KqmjpfnvIM'); 795 | INSERT INTO test_bean (id, description) VALUES (795, 'xuNMziayFrG8RAhREzsc'); 796 | INSERT INTO test_bean (id, description) VALUES (796, 'oU2cnt4H2oB4rFmIIg3n'); 797 | INSERT INTO test_bean (id, description) VALUES (797, 'JRPL28rIFU7imqhysEBc'); 798 | INSERT INTO test_bean (id, description) VALUES (798, '9N5wsBBfSAYtiAeiup8s'); 799 | INSERT INTO test_bean (id, description) VALUES (799, 'snR1uyMW3dlIg2GEQLOi'); 800 | INSERT INTO test_bean (id, description) VALUES (800, 'pkKtaJk56YIwpNaatkOR'); 801 | INSERT INTO test_bean (id, description) VALUES (801, 'S7aizvQ6mZr4O92OInQC'); 802 | INSERT INTO test_bean (id, description) VALUES (802, 'jQDVmLab44bPiNf6S8ef'); 803 | INSERT INTO test_bean (id, description) VALUES (803, 'HHs8fYu8PWPOT5vSqkWL'); 804 | INSERT INTO test_bean (id, description) VALUES (804, '1xt1SNaKZV2jn9qCmrso'); 805 | INSERT INTO test_bean (id, description) VALUES (805, '1oC2hfTNVvGN4OMSGvOD'); 806 | INSERT INTO test_bean (id, description) VALUES (806, 'KLKKY12pkTKrK94x2ywL'); 807 | INSERT INTO test_bean (id, description) VALUES (807, 'P3LDKM6mWcl3RRutOycN'); 808 | INSERT INTO test_bean (id, description) VALUES (808, 'Fu0dmcMycN0yVCzc0vgQ'); 809 | INSERT INTO test_bean (id, description) VALUES (809, 'SBoQ3iKADo42csUgQizo'); 810 | INSERT INTO test_bean (id, description) VALUES (810, 'cSixceClDk3cHnLUZUag'); 811 | INSERT INTO test_bean (id, description) VALUES (811, '6Hk1RQ4bCuKJtloEwzvz'); 812 | INSERT INTO test_bean (id, description) VALUES (812, 'gO6ykMtUB1fsKiPXGGCQ'); 813 | INSERT INTO test_bean (id, description) VALUES (813, '8zrAH6e80URC0ivsVYhQ'); 814 | INSERT INTO test_bean (id, description) VALUES (814, 'v4Dbcd7nXCGtXxTEjeDp'); 815 | INSERT INTO test_bean (id, description) VALUES (815, 'UyqSY05Cjq9AASKZNniM'); 816 | INSERT INTO test_bean (id, description) VALUES (816, 'bbPgyp8H9JCenu55r6Ud'); 817 | INSERT INTO test_bean (id, description) VALUES (817, 'DKBzLSyFIHF7eM0Da6i1'); 818 | INSERT INTO test_bean (id, description) VALUES (818, '43ov1OxMGMtvoZxuCLoU'); 819 | INSERT INTO test_bean (id, description) VALUES (819, '4GBe36oyfYbaj6NrIgbI'); 820 | INSERT INTO test_bean (id, description) VALUES (820, 'Rpao19BhcKOz53zvnzOv'); 821 | INSERT INTO test_bean (id, description) VALUES (821, 'cUJtyweUHB03TM3IUyWh'); 822 | INSERT INTO test_bean (id, description) VALUES (822, 'BfpnPMc5GuQ5v3Yfbtay'); 823 | INSERT INTO test_bean (id, description) VALUES (823, 'EQjQCQFvlyB6kZbCR27B'); 824 | INSERT INTO test_bean (id, description) VALUES (824, 'K2XM8wv1JZmb086KrOfk'); 825 | INSERT INTO test_bean (id, description) VALUES (825, 'M48SWLeYi8R53kuyjuTU'); 826 | INSERT INTO test_bean (id, description) VALUES (826, 'naqstwAPvq8jv49p8WYE'); 827 | INSERT INTO test_bean (id, description) VALUES (827, 'mvc6PGjLw5L3dOvwHIem'); 828 | INSERT INTO test_bean (id, description) VALUES (828, '0MUgKGtDt7UNe66rpdy1'); 829 | INSERT INTO test_bean (id, description) VALUES (829, 'yGsJqpNkKhsb2qDzm0jL'); 830 | INSERT INTO test_bean (id, description) VALUES (830, 'iyaSqhby9nrVCs1qxuXG'); 831 | INSERT INTO test_bean (id, description) VALUES (831, 'RT4BWZTD3aGjAmaHrp2h'); 832 | INSERT INTO test_bean (id, description) VALUES (832, 'sZwwsZgl7Y8MY0il9CHy'); 833 | INSERT INTO test_bean (id, description) VALUES (833, 'EpbvmXAH8eXXaPGKCv54'); 834 | INSERT INTO test_bean (id, description) VALUES (834, 'D2bcyyaDPwwGUjAtNWIs'); 835 | INSERT INTO test_bean (id, description) VALUES (835, 'ZPzMrOLbWRu4fXvVHObr'); 836 | INSERT INTO test_bean (id, description) VALUES (836, 'qDonwM592SdbP8mlKsMD'); 837 | INSERT INTO test_bean (id, description) VALUES (837, 'DrgP7Yg63Ww3LACCzm7K'); 838 | INSERT INTO test_bean (id, description) VALUES (838, 'w7ObmhxNnKzzkRQh3Gok'); 839 | INSERT INTO test_bean (id, description) VALUES (839, 'G5QhovpdcrsHPXsVKVDg'); 840 | INSERT INTO test_bean (id, description) VALUES (840, 'dS1XF9CraIptuNbAr6g7'); 841 | INSERT INTO test_bean (id, description) VALUES (841, 'XBDqSLZsXmX21dH7qI0F'); 842 | INSERT INTO test_bean (id, description) VALUES (842, 'ImvssyoKyMScL5ABu3aa'); 843 | INSERT INTO test_bean (id, description) VALUES (843, 'uKv84F5LNmKtR8CmAoDk'); 844 | INSERT INTO test_bean (id, description) VALUES (844, 'G7kXkO8LWSuZv3raTn0v'); 845 | INSERT INTO test_bean (id, description) VALUES (845, 'v6kToY7j5gbGJd6T4Ud0'); 846 | INSERT INTO test_bean (id, description) VALUES (846, 'timtTcBRrg52TqayuRWM'); 847 | INSERT INTO test_bean (id, description) VALUES (847, 'pbV45loiQa5D1K830rV0'); 848 | INSERT INTO test_bean (id, description) VALUES (848, 'wmtIJDutIajuXP0Lw9Kf'); 849 | INSERT INTO test_bean (id, description) VALUES (849, 'v8HLIKHmvz6KlPqvkLsM'); 850 | INSERT INTO test_bean (id, description) VALUES (850, 'yJClUYEheKip7jjrY6rs'); 851 | INSERT INTO test_bean (id, description) VALUES (851, 'Mq0y57mSftrsF1PwmUhC'); 852 | INSERT INTO test_bean (id, description) VALUES (852, 'aTfOM4kLwkwnUz4Zzo3l'); 853 | INSERT INTO test_bean (id, description) VALUES (853, 'e43TIEh1dXDJwR63MOzY'); 854 | INSERT INTO test_bean (id, description) VALUES (854, 'GbrLl4VhrJKTxWLmVGl5'); 855 | INSERT INTO test_bean (id, description) VALUES (855, 'D7RskLsaajLSN2wdW4AZ'); 856 | INSERT INTO test_bean (id, description) VALUES (856, '2kQ5d0YLIfXuczb2s4uA'); 857 | INSERT INTO test_bean (id, description) VALUES (857, 'rYeuY0s0DalsDzXXYXE4'); 858 | INSERT INTO test_bean (id, description) VALUES (858, 'h7YdPkZ9GGTnpsReNj4C'); 859 | INSERT INTO test_bean (id, description) VALUES (859, '807Iw12akZsXubpLdSnm'); 860 | INSERT INTO test_bean (id, description) VALUES (860, 'YLShadxrDOuOhbaXLO0A'); 861 | INSERT INTO test_bean (id, description) VALUES (861, '1LuaJZcKJPglWjOOCAOd'); 862 | INSERT INTO test_bean (id, description) VALUES (862, 'wnpvNZ6a3rfVizdSWmpF'); 863 | INSERT INTO test_bean (id, description) VALUES (863, 'qHyJj5m4GedHJpkpNTvm'); 864 | INSERT INTO test_bean (id, description) VALUES (864, 'd3ZLfyd9mi9Gg29AZEPR'); 865 | INSERT INTO test_bean (id, description) VALUES (865, 'zLXcilmoI7qw0usOATqe'); 866 | INSERT INTO test_bean (id, description) VALUES (866, 'UNYOp0KCUjNcgOuGn8Fo'); 867 | INSERT INTO test_bean (id, description) VALUES (867, '2LRp2F1WevDuAG3dG4Qj'); 868 | INSERT INTO test_bean (id, description) VALUES (868, 'PRB6Jt1kyo3hH7jEHpyK'); 869 | INSERT INTO test_bean (id, description) VALUES (869, 'EMeLx3mopEr0TRfgjoo6'); 870 | INSERT INTO test_bean (id, description) VALUES (870, '2gLN18BRd5pTYpW5OqYQ'); 871 | INSERT INTO test_bean (id, description) VALUES (871, 'KA8YnfLTL4TfYnzf04ul'); 872 | INSERT INTO test_bean (id, description) VALUES (872, 'i9aPb5kh5fHmR44oALTL'); 873 | INSERT INTO test_bean (id, description) VALUES (873, 'i3zxwoIbjhJynOURdYCj'); 874 | INSERT INTO test_bean (id, description) VALUES (874, 'Lk0lTJwhXqcbIkeGxNxj'); 875 | INSERT INTO test_bean (id, description) VALUES (875, '0Ej6Rknf2Y6mgbCLgSeE'); 876 | INSERT INTO test_bean (id, description) VALUES (876, 'LE3yKIlTcXr1X7gU7hRd'); 877 | INSERT INTO test_bean (id, description) VALUES (877, '0WJLpfv36iwKeFCmHF5J'); 878 | INSERT INTO test_bean (id, description) VALUES (878, '1dxJRzyhVD4YMy4UTvPA'); 879 | INSERT INTO test_bean (id, description) VALUES (879, 'aN13YUwfU4Ik1WqiN7aZ'); 880 | INSERT INTO test_bean (id, description) VALUES (880, '6FfcFD6P20vsCMKqBvVy'); 881 | INSERT INTO test_bean (id, description) VALUES (881, '35oiWD633pZMWAgHm67Q'); 882 | INSERT INTO test_bean (id, description) VALUES (882, 'sYeNvr2FQYBU78Jworv9'); 883 | INSERT INTO test_bean (id, description) VALUES (883, 'clV6zz6VugwQ0Sky19FM'); 884 | INSERT INTO test_bean (id, description) VALUES (884, 'asRVAHrBlBu9iLqEpQDJ'); 885 | INSERT INTO test_bean (id, description) VALUES (885, 'RSJ1w5iMUcbaNj0LBaza'); 886 | INSERT INTO test_bean (id, description) VALUES (886, 'Q2MshU1H7pdZ4Bcru8hZ'); 887 | INSERT INTO test_bean (id, description) VALUES (887, '6i1sMEvaMNCkMFmilsAr'); 888 | INSERT INTO test_bean (id, description) VALUES (888, 'UF9b4y98EjwqV6MsUSjH'); 889 | INSERT INTO test_bean (id, description) VALUES (889, 'q5W6KsGJsPo3H6QBbi7c'); 890 | INSERT INTO test_bean (id, description) VALUES (890, 'rlJgrJBeA3RaHtcg6K8r'); 891 | INSERT INTO test_bean (id, description) VALUES (891, 'mHmQ5AkDMSPJQFaxlAZ9'); 892 | INSERT INTO test_bean (id, description) VALUES (892, 'fEHSmCLDxhxirwEXNsJB'); 893 | INSERT INTO test_bean (id, description) VALUES (893, 'R2ILgJR7oeJgJH4iaPoZ'); 894 | INSERT INTO test_bean (id, description) VALUES (894, '6z4EqIHgWsHJwUQCzgF8'); 895 | INSERT INTO test_bean (id, description) VALUES (895, 'A96qsUaQRU7XQD2ONNro'); 896 | INSERT INTO test_bean (id, description) VALUES (896, '6LtcWzsIY49euw97c6SU'); 897 | INSERT INTO test_bean (id, description) VALUES (897, '3kq1nXJYQFLveFyyAwbn'); 898 | INSERT INTO test_bean (id, description) VALUES (898, 'PAc8IElbnmC4j8DjORDX'); 899 | INSERT INTO test_bean (id, description) VALUES (899, 'gq0KQNcgftjLCw5j8lLk'); 900 | INSERT INTO test_bean (id, description) VALUES (900, 'szdC25aGznpWXW0cH4GS'); 901 | INSERT INTO test_bean (id, description) VALUES (901, 'axWM4Eu0X2uRfXm2gstV'); 902 | INSERT INTO test_bean (id, description) VALUES (902, 'K98E7IlYE0vpBLpV8WTR'); 903 | INSERT INTO test_bean (id, description) VALUES (903, '94UFvLTBgAbSBkStYmUd'); 904 | INSERT INTO test_bean (id, description) VALUES (904, 'vMaDpKPp8CU5NApVF1pM'); 905 | INSERT INTO test_bean (id, description) VALUES (905, 'aUJmyT1Z2teAaUvkESfP'); 906 | INSERT INTO test_bean (id, description) VALUES (906, 'NftKlhzzvhtnxLtjmCDC'); 907 | INSERT INTO test_bean (id, description) VALUES (907, 'szzEuNIdfL5l6OijgpdO'); 908 | INSERT INTO test_bean (id, description) VALUES (908, 'yY4kZ0rVBDNe9vYi0hz8'); 909 | INSERT INTO test_bean (id, description) VALUES (909, 'U3bNqkqHEYKLsw7KIUWN'); 910 | INSERT INTO test_bean (id, description) VALUES (910, 'dlTtEywzpXreyxKf6rQ9'); 911 | INSERT INTO test_bean (id, description) VALUES (911, 'cbV5cZHS5JQmcJ0j2v5f'); 912 | INSERT INTO test_bean (id, description) VALUES (912, 'ESSlvJ0cYcGuKKDlK1C9'); 913 | INSERT INTO test_bean (id, description) VALUES (913, 'j4Et428hwgaZaVzQrrbt'); 914 | INSERT INTO test_bean (id, description) VALUES (914, 'XRytkB9zcvAs8z5DptPb'); 915 | INSERT INTO test_bean (id, description) VALUES (915, '5lNV9v1NqN9YZtcFSgBY'); 916 | INSERT INTO test_bean (id, description) VALUES (916, 'KYkGpQZF2W3EW77EoNxs'); 917 | INSERT INTO test_bean (id, description) VALUES (917, 'gpNTzCmz5wV7ojOy88be'); 918 | INSERT INTO test_bean (id, description) VALUES (918, 'Kj8SbIv4RI6kopBr2ePJ'); 919 | INSERT INTO test_bean (id, description) VALUES (919, 'c5iKbJ51ME0kzopLxK4U'); 920 | INSERT INTO test_bean (id, description) VALUES (920, '65upmUDiOEGhHli1xv2V'); 921 | INSERT INTO test_bean (id, description) VALUES (921, 'iQCM0hlBxCS6cu6FUCOa'); 922 | INSERT INTO test_bean (id, description) VALUES (922, 'Z8upOG6Z5mlUglwQ2PgG'); 923 | INSERT INTO test_bean (id, description) VALUES (923, 'fCLOxmPI7HerYABEU5Ey'); 924 | INSERT INTO test_bean (id, description) VALUES (924, 'vgs97W8cAfRcOuQ9hc9k'); 925 | INSERT INTO test_bean (id, description) VALUES (925, 'qBeLNOJhUnXLn8NR3z6Z'); 926 | INSERT INTO test_bean (id, description) VALUES (926, '5Jm8WB52zdrEqmXoojYP'); 927 | INSERT INTO test_bean (id, description) VALUES (927, 'xAIpCsfXiQnUWEtH2kjY'); 928 | INSERT INTO test_bean (id, description) VALUES (928, 'LGPay57viUO6Ildq1jLO'); 929 | INSERT INTO test_bean (id, description) VALUES (929, 'B77Qml2sEUMDTbsB6VNd'); 930 | INSERT INTO test_bean (id, description) VALUES (930, '2KNyZKtp7O0MhFGcoyF2'); 931 | INSERT INTO test_bean (id, description) VALUES (931, 'sPE7MdjODxXJxxuwyXuF'); 932 | INSERT INTO test_bean (id, description) VALUES (932, 'CG3yiYV2RbeHamSJaslc'); 933 | INSERT INTO test_bean (id, description) VALUES (933, 'UauEm8bRNtKMst4kGQ1I'); 934 | INSERT INTO test_bean (id, description) VALUES (934, '6hAr5IL2QtdNIFUHwagn'); 935 | INSERT INTO test_bean (id, description) VALUES (935, 'xbI8nPtXhQMx6aUnSIDI'); 936 | INSERT INTO test_bean (id, description) VALUES (936, 'wFvm0GBLf9jXGSGkTn2P'); 937 | INSERT INTO test_bean (id, description) VALUES (937, 'aM9i230jxUbtF2NrfevK'); 938 | INSERT INTO test_bean (id, description) VALUES (938, 'wR15SUMlA3FVlaBTY8lC'); 939 | INSERT INTO test_bean (id, description) VALUES (939, 'NoicXLdzIg4fjqPjuLyl'); 940 | INSERT INTO test_bean (id, description) VALUES (940, 'URmzJJJTYCoy8depglSa'); 941 | INSERT INTO test_bean (id, description) VALUES (941, '9apHy3U7r1FvKgtwB3Bo'); 942 | INSERT INTO test_bean (id, description) VALUES (942, 'B4WL1Fl93bHEqgC7AjHs'); 943 | INSERT INTO test_bean (id, description) VALUES (943, 'Vtr5VUsRpDuxJTiUgA9R'); 944 | INSERT INTO test_bean (id, description) VALUES (944, 'QmvzODdJrEsa3Y91GnaL'); 945 | INSERT INTO test_bean (id, description) VALUES (945, 'nTHiVsmmtZvIdLpPghTm'); 946 | INSERT INTO test_bean (id, description) VALUES (946, '6yBI81HdpCcJDY1LQ9Oz'); 947 | INSERT INTO test_bean (id, description) VALUES (947, 'AdaOJGOdxGA7EN7l6ko1'); 948 | INSERT INTO test_bean (id, description) VALUES (948, 'WKwnKF19aoZ266SVFsNp'); 949 | INSERT INTO test_bean (id, description) VALUES (949, 'TEFEpOZxEATuhHf2YNAK'); 950 | INSERT INTO test_bean (id, description) VALUES (950, 'ncmZvXAY7IEpgtNChBQK'); 951 | INSERT INTO test_bean (id, description) VALUES (951, 'l5zCBCgnCHa5I8ELBcTA'); 952 | INSERT INTO test_bean (id, description) VALUES (952, '5sx91r7quAAgUG04x7xn'); 953 | INSERT INTO test_bean (id, description) VALUES (953, 'efNzpdHP7qfgM0MhfnNy'); 954 | INSERT INTO test_bean (id, description) VALUES (954, 'IY3euy5xh7VyWvEl45is'); 955 | INSERT INTO test_bean (id, description) VALUES (955, 'hYYZRo8jNUL9X8rRlDHm'); 956 | INSERT INTO test_bean (id, description) VALUES (956, 'nD6HVFarIaOkXULXQ9Pi'); 957 | INSERT INTO test_bean (id, description) VALUES (957, 'Ez0XItYCTAxJFxqbiekV'); 958 | INSERT INTO test_bean (id, description) VALUES (958, 'YFaZotepFWzRwjC9QZHX'); 959 | INSERT INTO test_bean (id, description) VALUES (959, '0Y3BzV8u24BXz0GeYl1s'); 960 | INSERT INTO test_bean (id, description) VALUES (960, 'H6g0x8orrCPr9LHeDaJL'); 961 | INSERT INTO test_bean (id, description) VALUES (961, 'WA83XlkQrgmgWDR6cuxa'); 962 | INSERT INTO test_bean (id, description) VALUES (962, 'hIXBYqFCHPVUXMeKpNy5'); 963 | INSERT INTO test_bean (id, description) VALUES (963, 'ng9tS2U88R50nWPvrEaU'); 964 | INSERT INTO test_bean (id, description) VALUES (964, 'raj46NdMg2Tdiz6uMEVf'); 965 | INSERT INTO test_bean (id, description) VALUES (965, '25XxsjtWz7bwjFqhA76g'); 966 | INSERT INTO test_bean (id, description) VALUES (966, '2OAYaasb6I4p5e0ru1yw'); 967 | INSERT INTO test_bean (id, description) VALUES (967, 'iRYJJA5MgRxv3BtxIq47'); 968 | INSERT INTO test_bean (id, description) VALUES (968, 'wN393meOHNBi5aTDXVXT'); 969 | INSERT INTO test_bean (id, description) VALUES (969, 'uF8gUfo6oOBw2rTMWRkX'); 970 | INSERT INTO test_bean (id, description) VALUES (970, '7HSa5HFGvZhNEoi3dFd8'); 971 | INSERT INTO test_bean (id, description) VALUES (971, 'fiV54Z2TFfyW9VRGZ1Jm'); 972 | INSERT INTO test_bean (id, description) VALUES (972, 'Tbx0LTrDtvQBoviBmZ32'); 973 | INSERT INTO test_bean (id, description) VALUES (973, 'ZlzvfILZ59FYlebfsMab'); 974 | INSERT INTO test_bean (id, description) VALUES (974, 'V6yPvFNr1Sy3AeBgXvHQ'); 975 | INSERT INTO test_bean (id, description) VALUES (975, 'XKbcnXYNXc5fMRwPcuqn'); 976 | INSERT INTO test_bean (id, description) VALUES (976, 'st3vxwid5iCkZB551cui'); 977 | INSERT INTO test_bean (id, description) VALUES (977, 'IVbocpXcWwAYoAwgngKV'); 978 | INSERT INTO test_bean (id, description) VALUES (978, 'Fz9XvwsyySEVd8LAE74y'); 979 | INSERT INTO test_bean (id, description) VALUES (979, '5oSPskxFTOQOhb3MZvAp'); 980 | INSERT INTO test_bean (id, description) VALUES (980, 'FONh86020w7fV59YNkxB'); 981 | INSERT INTO test_bean (id, description) VALUES (981, 'ijIV8ASKQ8hGEmfOdA9C'); 982 | INSERT INTO test_bean (id, description) VALUES (982, 'gKWalNJWxxI50dFGDCw0'); 983 | INSERT INTO test_bean (id, description) VALUES (983, 'Aai47QO1ZrVRBLHatDF7'); 984 | INSERT INTO test_bean (id, description) VALUES (984, 'ocHScJy4dhm46Wo8rXct'); 985 | INSERT INTO test_bean (id, description) VALUES (985, 'xT2WNrCViRgnz3RCG1rR'); 986 | INSERT INTO test_bean (id, description) VALUES (986, '8wvR1MfPkuLw1IFjo6QF'); 987 | INSERT INTO test_bean (id, description) VALUES (987, '9N0TyodQloghbMB4LMT4'); 988 | INSERT INTO test_bean (id, description) VALUES (988, '9t02OkWpX5rAxzwZQCpt'); 989 | INSERT INTO test_bean (id, description) VALUES (989, 'iZnuvk9s9pSnzXGQywS3'); 990 | INSERT INTO test_bean (id, description) VALUES (990, 'HUwsjyGgSFbKDdGOOyJQ'); 991 | INSERT INTO test_bean (id, description) VALUES (991, 'JbzNGV0m3zWRMiOzbfoX'); 992 | INSERT INTO test_bean (id, description) VALUES (992, 'KkBgTYO8frARRAvaPZyH'); 993 | INSERT INTO test_bean (id, description) VALUES (993, 'L2duCyfkpNL0ysTowAR2'); 994 | INSERT INTO test_bean (id, description) VALUES (994, 'sgUpeYRVBzl6c0bBXuyn'); 995 | INSERT INTO test_bean (id, description) VALUES (995, 'DdNMq6WJLhVboyXVxoDr'); 996 | INSERT INTO test_bean (id, description) VALUES (996, 'OnkKz8n6Z4pdCEkllaAm'); 997 | INSERT INTO test_bean (id, description) VALUES (997, '9NiDsAxV9X1T4ctxbsWi'); 998 | INSERT INTO test_bean (id, description) VALUES (998, 'mP0zC3mDFcQaLhXgWT48'); 999 | INSERT INTO test_bean (id, description) VALUES (999, 'GSimHyVwficGnduutBaJ'); 1000 | INSERT INTO test_bean (id, description) VALUES (1000, '62yDA3LI5tS4tPWJKCoN'); -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | 4.0.0 22 | 23 | org.kotlinprimavera 24 | parent 25 | 0.5 26 | pom 27 | KotlinPrimavera 28 | Spring Framework Support libraries for Kotlin 29 | https://github.com/MarioAriasC/KotlinPrimavera 30 | 31 | 32 | The Apache Software License, Version 2.0 33 | http://www.apache.org/licenses/LICENSE-2.0.txt 34 | repo 35 | 36 | 37 | 38 | https://github.com/MarioAriasC/KotlinPrimavera 39 | git@github.com:MarioAriasC/KotlinPrimavera.git 40 | 41 | 42 | context 43 | beans 44 | core 45 | jdbc 46 | tx 47 | webmvc 48 | security 49 | 50 | 51 | 1.0.0 52 | 0.8 53 | 54 | 55 | 56 | central 57 | https://repo1.maven.org/maven2 58 | 59 | true 60 | 61 | 62 | 63 | JCenter 64 | bintray 65 | http://jcenter.bintray.com 66 | 67 | 68 | 69 | 70 | 71 | io.spring.platform 72 | platform-bom 73 | 2.0.2.RELEASE 74 | pom 75 | import 76 | 77 | 78 | 79 | 80 | 81 | org.jetbrains.kotlin 82 | kotlin-stdlib 83 | ${kotlin.version} 84 | 85 | 86 | org.slf4j 87 | jcl-over-slf4j 88 | test 89 | 90 | 91 | org.slf4j 92 | slf4j-api 93 | test 94 | 95 | 96 | ch.qos.logback 97 | logback-classic 98 | test 99 | 100 | 101 | org.springframework 102 | spring-core 103 | compile 104 | 105 | 106 | commons-logging 107 | commons-logging 108 | 109 | 110 | 111 | 112 | org.springframework 113 | spring-context 114 | compile 115 | 116 | 117 | org.springframework 118 | spring-test 119 | test 120 | 121 | 122 | org.testng 123 | testng 124 | test 125 | 126 | 127 | 128 | org.funktionale 129 | funktionale 130 | ${funktionale.version} 131 | 132 | 133 | org.jetbrains.kotlin 134 | kotlin-reflect 135 | ${kotlin.version} 136 | test 137 | 138 | 139 | 140 | 141 | bintray-marioariasc-KotlinPrimavera-KotlinPrimavera 142 | marioariasc-KotlinPrimavera-KotlinPrimavera 143 | https://api.bintray.com/maven/marioariasc/KotlinPrimavera/KotlinPrimavera 144 | 145 | 146 | 147 | 148 | 149 | org.apache.maven.plugins 150 | maven-source-plugin 151 | 2.1.2 152 | 153 | 154 | attach-sources 155 | verify 156 | 157 | jar-no-fork 158 | 159 | 160 | 161 | 162 | 163 | org.apache.maven.plugins 164 | maven-gpg-plugin 165 | 166 | 167 | sign-artifacts 168 | verify 169 | 170 | sign 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | -------------------------------------------------------------------------------- /security/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | 4.0.0 22 | 23 | org.kotlinprimavera 24 | parent 25 | 0.5 26 | 27 | security 28 | KotlinPrimavera Security Module 29 | jar 30 | 0.5 31 | 32 | 33 | org.springframework.security 34 | spring-security-config 35 | 36 | 37 | 38 | src/main/kotlin 39 | src/test/kotlin 40 | 41 | 42 | kotlin-maven-plugin 43 | org.jetbrains.kotlin 44 | ${kotlin.version} 45 | 46 | 47 | compile 48 | compile 49 | 50 | compile 51 | 52 | 53 | 54 | 55 | test-compile 56 | test-compile 57 | 58 | test-compile 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /security/src/main/kotlin/org/kotlinprimavera/security/config/annnotation/web/builders/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.security.config.annnotation.web.builders 18 | 19 | import org.springframework.security.config.annotation.web.builders.HttpSecurity 20 | import org.springframework.security.config.annotation.web.configurers.* 21 | import org.springframework.security.config.annotation.web.configurers.openid.OpenIDLoginConfigurer 22 | 23 | fun HttpSecurity.formLogin(body: FormLoginConfigurer.() -> FormLoginConfigurer): HttpSecurity { 24 | return formLogin().body().and() 25 | } 26 | 27 | fun HttpSecurity.exceptionHandling(body: ExceptionHandlingConfigurer.() -> ExceptionHandlingConfigurer): HttpSecurity { 28 | return exceptionHandling().body().and() 29 | } 30 | 31 | fun HttpSecurity.authorizeRequests(body: ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry.() -> ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry): HttpSecurity { 32 | return authorizeRequests().body().and() 33 | } 34 | 35 | fun HttpSecurity.logout(body: LogoutConfigurer.() -> LogoutConfigurer): HttpSecurity { 36 | return logout().body().and() 37 | } 38 | 39 | fun HttpSecurity.openidLogin(body: OpenIDLoginConfigurer.() -> OpenIDLoginConfigurer): HttpSecurity { 40 | return openidLogin().body().and() 41 | } 42 | 43 | fun HttpSecurity.headers(body: HeadersConfigurer.() -> HeadersConfigurer): HttpSecurity { 44 | return headers().body().and() 45 | } 46 | 47 | fun HttpSecurity.sessionManagement(body: SessionManagementConfigurer.() -> SessionManagementConfigurer): HttpSecurity { 48 | return sessionManagement().body().and() 49 | } 50 | 51 | fun HttpSecurity.portMapper(body: PortMapperConfigurer.() -> PortMapperConfigurer): HttpSecurity { 52 | return portMapper().body().and() 53 | } 54 | 55 | fun HttpSecurity.jee(body: JeeConfigurer.() -> JeeConfigurer): HttpSecurity { 56 | return jee().body().and() 57 | } 58 | 59 | fun HttpSecurity.x509(body: X509Configurer.() -> X509Configurer): HttpSecurity { 60 | return x509().body().and() 61 | } 62 | 63 | fun HttpSecurity.rememberMe(body: RememberMeConfigurer.() -> RememberMeConfigurer): HttpSecurity { 64 | return rememberMe().body().and() 65 | } 66 | 67 | fun HttpSecurity.requestCache(body: RequestCacheConfigurer.() -> RequestCacheConfigurer): HttpSecurity { 68 | return requestCache().body().and() 69 | } 70 | 71 | fun HttpSecurity.securityContext(body: SecurityContextConfigurer.() -> SecurityContextConfigurer): HttpSecurity { 72 | return securityContext().body().and() 73 | } 74 | 75 | fun HttpSecurity.servletApi(body: ServletApiConfigurer.() -> ServletApiConfigurer): HttpSecurity { 76 | return servletApi().body().and() 77 | } 78 | 79 | fun HttpSecurity.csrf(body: CsrfConfigurer.() -> CsrfConfigurer): HttpSecurity { 80 | return csrf().body().and() 81 | } 82 | 83 | fun HttpSecurity.anonymous(body: AnonymousConfigurer.() -> AnonymousConfigurer): HttpSecurity { 84 | return anonymous().body().and() 85 | } 86 | 87 | fun HttpSecurity.requiresChannel(body: ChannelSecurityConfigurer.ChannelRequestMatcherRegistry.() -> ChannelSecurityConfigurer.ChannelRequestMatcherRegistry): HttpSecurity { 88 | return requiresChannel().body().and() 89 | } 90 | 91 | fun HttpSecurity.httpBasic(body: HttpBasicConfigurer.() -> HttpBasicConfigurer): HttpSecurity { 92 | return httpBasic().body().and() 93 | } 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /tx/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | 4.0.0 22 | 23 | org.kotlinprimavera 24 | parent 25 | 0.5 26 | 27 | tx 28 | KotlinPrimavera Tx Module 29 | jar 30 | 0.5 31 | 32 | 33 | org.springframework 34 | spring-tx 35 | compile 36 | 37 | 38 | org.springframework 39 | spring-jdbc 40 | test 41 | 42 | 43 | org.hsqldb 44 | hsqldb 45 | test 46 | 47 | 48 | 49 | src/main/kotlin 50 | src/test/kotlin 51 | 52 | 53 | kotlin-maven-plugin 54 | org.jetbrains.kotlin 55 | ${kotlin.version} 56 | 57 | 58 | compile 59 | compile 60 | 61 | compile 62 | 63 | 64 | 65 | 66 | test-compile 67 | test-compile 68 | 69 | test-compile 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /tx/src/test/kotlin/org/kotlinprimavera/transaction/support/TransactionOperationsTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.transaction.support 18 | 19 | import org.springframework.beans.factory.annotation.Autowired 20 | import org.springframework.jdbc.core.JdbcTemplate 21 | import org.springframework.test.context.ContextConfiguration 22 | import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests 23 | import org.springframework.transaction.annotation.Propagation 24 | import org.springframework.transaction.annotation.Transactional 25 | import org.springframework.transaction.support.TransactionTemplate 26 | import org.testng.Assert 27 | import org.testng.annotations.Test 28 | 29 | /** 30 | * Created by IntelliJ IDEA. 31 | * @author Mario Arias 32 | * Date: 26/12/13 33 | * Time: 20:06 34 | */ 35 | @ContextConfiguration class TransactionOperationsTest : AbstractTransactionalTestNGSpringContextTests() { 36 | @Autowired lateinit var txTemplate: TransactionTemplate 37 | @Autowired lateinit var template: JdbcTemplate 38 | 39 | @Test 40 | @Transactional(propagation = Propagation.NOT_SUPPORTED) 41 | fun testExecute() { 42 | txTemplate.execute { status -> 43 | template.update("delete from test_bean") 44 | status.setRollbackOnly() 45 | } 46 | 47 | Assert.assertEquals(countRowsInTable("test_bean"), 5) 48 | } 49 | } -------------------------------------------------------------------------------- /tx/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | [KotlinPrimavera Tx] %d{HH:mm:ss.SSS} [%thread] %level %logger{32} - %msg%n 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /tx/src/test/resources/org/kotlinprimavera/transaction/support/TransactionOperationsTest-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /tx/src/test/resources/schema-hsql.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE test_bean IF EXISTS; 2 | CREATE TABLE test_bean ( 3 | id INT IDENTITY PRIMARY KEY, 4 | description VARCHAR(1024), 5 | create_date TIMESTAMP DEFAULT current_timestamp 6 | ); -------------------------------------------------------------------------------- /tx/src/test/resources/test-data.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO test_bean (id, description) VALUES (1, 'python'); 2 | INSERT INTO test_bean (description) VALUES ('ruby'); 3 | INSERT INTO test_bean (description) VALUES ('scala'); 4 | INSERT INTO test_bean (description) VALUES ('java'); 5 | INSERT INTO test_bean (description) VALUES ('kotlin'); -------------------------------------------------------------------------------- /webmvc/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | 4.0.0 22 | 23 | org.kotlinprimavera 24 | parent 25 | 0.5 26 | 27 | webmvc 28 | KotlinPrimavera Web MVC Module 29 | jar 30 | 0.5 31 | 32 | 33 | org.springframework 34 | spring-webmvc 35 | 36 | 37 | 38 | src/main/kotlin 39 | src/test/kotlin 40 | 41 | 42 | kotlin-maven-plugin 43 | org.jetbrains.kotlin 44 | ${kotlin.version} 45 | 46 | 47 | 48 | compile 49 | compile 50 | 51 | compile 52 | 53 | 54 | 55 | 56 | test-compile 57 | test-compile 58 | 59 | test-compile 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /webmvc/src/main/kotlin/org/kotlinprimavera/web/servlet/namespace.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013 Mario Arias 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.kotlinprimavera.web.servlet 18 | 19 | import org.springframework.web.servlet.ModelAndView 20 | 21 | /** 22 | * Created by IntelliJ IDEA. 23 | * @author Mario Arias 24 | * Date: 7/09/13 25 | * Time: 1:24 26 | */ 27 | 28 | operator fun ModelAndView.set(attributeName: String, attributeValue: Any?) { 29 | this.addObject(attributeName, attributeValue) 30 | } 31 | 32 | fun ModelAndView.addAllObjects(vararg objects: Pair): ModelAndView { 33 | this.addAllObjects(mapOf(*objects)) 34 | return this 35 | } 36 | 37 | 38 | --------------------------------------------------------------------------------